我有一个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列表中使用它,我自己以前没用过它。
答案 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...
方法的更多信息,请阅读并参考参数。
还有别的吗?