2D SortedList包含int和string,需要最高int的字符串

时间:2015-01-27 23:59:20

标签: c# arrays string loops max

我有一个2D列表,其中包含句子和为该句子生成的分数,我需要得到得分最高的句子。

所以列表是:

("This is sentence one", "302")
("And another sentence", "154")
("Oh and heres another", "528")

列表形成的功能以及我需要获得得分最高的句子的地方是:

    protected void buildSummary()
    {
        scoreCoord2 = -1;
        for (int x1 = 0; x1 < results.Length; x1++)
        {
            SortedList<int, string> paragraphScoreslist = new SortedList<int, string>();
            for (int x2 = 0; x2 < results[x1].Length; x2++)
            {
                scoreCoord2++;
                paragraphScoreslist.Add(intersectionSentenceScores[scoreCoord2], results[x1][x2]);
            }
            int maxValue = paragraphScoreslist.Max(k => k.Key);
            //string maxValue = paragraphScoreslist.TryGetValue;
            TextboxSummary.Text = maxValue.ToString();
        }
    }

我能够从排序列表中获取最高的int值,但不知道如何获取与之绑定的字符串。我想我需要使用TryGetValue,但我不知道在2D列表中使用它,我自己以前没用过它。

1 个答案:

答案 0 :(得分:2)

如果你可以控制数组,可以用SortedList替换它,你可以毫不费力地使用SortedList.Max()函数。排序列表可能是最佳选择,因为它本身排序(您想要),因此获得最高(即最大值)将比未排序数组或未排序列表更快。

如果您无法控制所接收的数据,请将您获得的数据投影到新表单中(上面的SortedList

按照您在帖子中添加的示例,为简单起见,我们称之为“矩阵”:

string[,] matrix = 
{
    { "This is sentence one", "302" }, 
    { "And another sentence", "154" },
    { "Oh and heres another", "528" }
};

以下是将其放入已排序列表的代码:

// New instance, pretty simple
SortedList<int, string> list = new SortedList<int, string>();

// Loop through the array and project it into a new form
for(int i = 0; i <= matrix.Length(0); i++) {
        list.Add(Convert.ToInt32(matrix[i, 1]), matrix[i, 0]);
}

// Get the max value in the list
var maxValue = list.Max(k => k.Key);

现在,您可以使用该值执行所需操作。如果你想获得它的句子,你应该使用TryGetValue方法,但这取决于你。像这样:

string sentence= string.Empty;
if (list.TryGetValue(maxValue, out sentence))
{
    // Do something with the string you got
}

有关如何使用整个Try...方法的更多信息,请阅读并参考参数。

还有别的吗?