コレクション内のリストの相違点(または類似点)の数をカウントします。次のコードは、正しい結果を生成するforループです。最初のレコード。 良い方法がありますか? Linqと、おそらく?Linq countコレクション内のリストの相違数
私はこのようにそれをやって行くだろうpublic void Main(){
_records = new ObservableCollection<Record>();
_records.Add(new Record { Name = "Correct", Results = new List<string> { "A", "B","C" } , Score="100%"});
_records.Add(new Record { Name = "John", Results = new List<string> { "A", "B" ,"C" } }); //Expect score to be 3/3 (100%)
_records.Add(new Record { Name = "Joseph", Results = new List<string> { "A", "C","B" } }); //Expect score to be 2/3 (67%)
_records.Add(new Record { Name = "James", Results = new List<string> { "C", "C", "C" } }); //Expect score to be 1/3 (33%)
for(int i = 1; i < _records.Count(); i++) // Each Results in the _records except "Correct"
{
float score = _records[0].Results.Count();
_records[i].Score = string.Format("{0:p1}", (score - CountDifferences(_records[i].Results, _records[0].Results))/score);
}
}
private int CountDifferences(List<string> x, List<string> y)
{
return (x.Zip(y, (a, b) => a.Equals(b) ? 0 : 1).Sum());
}
なぜ3番目のレコードのスコアが67%になると思いますか? – Enigmativity
私は、あなたが本当にヨセフが33%の得点を得ていたと仮定することができます。 Enigmativityによって示唆されるように。インデックスで整列する唯一の等級はA.なので、その前提に基づいて、私はあなたのカスタムクラスの代わりに辞書を使う答えを出しました。 – Edward