我有一個List<X>
其中X
有幾個領域:列表<T> - 區別的T.field
public string word;
public int count;
我如何得到一個List<X>
具有鮮明X.word
元素?
我有一個List<X>
其中X
有幾個領域:列表<T> - 區別的T.field
public string word;
public int count;
我如何得到一個List<X>
具有鮮明X.word
元素?
您可以使用分組
var n = from n in items
group n by n.word into g
select g.First();
MoreLinq有DistinctBy
方法:
var distinctByWord = list.DistinctBy(x => x.Word).ToList();
你需要使用Distinct方法,它的IEqualityComparer<X>
實例的過載:
new List<X>().Distinct(new XComparer());
public class XComparer : IEqualityComparer<X> {
public bool Equals(X x, X y) {
return x.word.Equals(y.word);
}
public int GetHashCode(X obj) {
return obj.word.GetHashCode();
}
}
public class X {
public string Word { get; set; }
public int Count { get; set; }
}
然後:
var myList = new List<X>() {
new X(){ Count = 1, Word = "A" },
new X(){ Count = 2, Word = "A"},
new X(){ Count = 1, Word = "B"}
};
foreach(var x in myList.Distinct(new XComparer()))
Console.WriteLine(x.Count + " " + x.Word);
打印:
1 A
1 B
這個返回一個列表''
現在更好;) –
@ThomasLevesque - 謝謝你讓我說實話:) –
從你的數據結構,我建議你可能要一個解釋,而不是一個列表。
如果您正在計算查看某個單詞的次數,或者通過添加計數結合其他輸入的(單詞,計數)對,可以更有效地使用Dictionary來執行此操作,因爲您不必掃描列表以找到要更新的條目。
+1指出了這一點,然而,一個更完整的答案本來還包括如果字典不是他想要的,該怎麼辦。 –
我認爲這個想法是計數的話,而不是失去同名單詞的計數,對吧?如果是這樣,它會提醒我使用map-reduce算法。你已經完成了地圖,所以你需要以某種方式減少。我建議你創建新的Dictionary<string,int>
並循環你的列表。如果字典沒有單詞 - 添加它(關鍵字,計數值),如果有 - 將計數添加到值。
我不知道它對您使用列表以及性能是否是一個問題有多重要。如果SortedList可以,你可以爲X定義一個比較運算符,這個運算符對字符串使用字典式的排序(X
Thomas