List<double> numbers1 = [1,3,5,6,4.5,2.1,.......];
List<double> numbers2 = [.5,3.2,5.4,6,4.5,2.1,.......];
2列出我想要[1]在列表1蒙山[0.5]在列表2
if([1] close to[.5])
的比較例如
這意味着如果在fisrst列表中的第一項的值接近在第二列表 和等中的第一項的值,第二用第二,第三與第三
我該如何做這個c#?
List<double> numbers1 = [1,3,5,6,4.5,2.1,.......];
List<double> numbers2 = [.5,3.2,5.4,6,4.5,2.1,.......];
2列出我想要[1]在列表1蒙山[0.5]在列表2
if([1] close to[.5])
的比較例如
這意味着如果在fisrst列表中的第一項的值接近在第二列表 和等中的第一項的值,第二用第二,第三與第三
我該如何做這個c#?
只需選中使用Math.Abs
兩個相關項目的區別:
bool allElementsClose = true;
for(int i = 0; i < lis1.Count && allElementsClose; i++)
{
if(Math.Abs(list1[i] - list2[i]) > threshold)
{
Console.WiteLine("items not close");
allElementsClose = false;
break;
}
}
但是,您應該迭代之前就項目的數量進行一些檢查。使用LINQ
替代做法:
var allElementsClose = list1
.Select((x, i) => Math.Abs(x - list2[i]))
.All(x => x < threashhold);
這種方法使用的選擇使用Func<T, int>
用於獲取元素及其在集合中的索引過載。然後可以使用此索引來獲取第二個列表中的相應項目並計算與其的差異。
其實它取決於「關閉」對你的意義。 我會假設,如果數字之間的差異小於1,它是接近的。
因此,代碼將是非常簡單的
我將創建3所列出。 list1的,list2中,listResult(這將只包含布爾值,其指示在list1的該項是否是接近項目在列表2。
var list1 = new List<float>();
var list2 = new List<float>();
var listResult = new List<bool>();
3個上面的行,應該去的方法或事件之外的,喜歡的button1_Click。
//to add values to the list you can use list1.addNew(5) and it will add the "5" to the list
void CompareLists(){
//first of all we check if list1 and list2 have the same number of items
if(list1.Count == list2.Count){
for (int i=0; i<list1.Count; i++){
if (list1[i] - list2[i] < 1)
listResult.addNew(true);
else
listResult.addNew(false);
}
}
}
現在你有一個像 [真],[真],[虛假]
希望,它爲你的作品boolens的列表。
最簡單的解決方案將是使用Zip,其是指對兩個集合的每個映射元素的比較,也將照顧差中的元素數目,因爲它會檢查Enumerator.MoveNext()
內部
var result = numbers1.Zip(numbers2,(n1,n2) => n1 - n2 < 0.5 ? "Close" : "Not Close");
result
將IEnumerable<string>
由值"Close" and "Not Close"
警告:
將溶液冷卻,沒不知道這種方法存在。 – HimBromBeere
@HimBromBeere :),Linq中存在很多這樣的gem,事實上許多已知的API都有有趣的重載來實現結果 –
在.NET 4.0中,你還可以Zip()
可供選擇:
var numbers1 = new List<double>() { 1, 3, 5, 6, 4.5, 2.1 };
var numbers2 = new List<double>() { 0.5, 3.2, 5.4, 6, 4.5, 2.1 };
var allElementsClose = numbers1
.Zip(numbers2, (i1, i2) => Math.Abs(i1 - i2))
.All(x => x < threshold);
有什麼預期收益? – Sakuto
什麼是「關閉」? – HimBromBeere
換言/編輯你的問題,並解釋你想如何比較...以及如果列表1有更多的數字,然後列表2呢? – Jim