我有數據集的真/假值列表。這些列表可以是任意長度,但在大多數情況下,通常會在5到40個項目之間變化。在每個數據集中,所有列表將具有相同的長度。爲了這個過程的目的,列表中的元素一旦被創建,將始終以相同的順序(即,一旦列表被設置爲true,false,false,true,它將始終爲真,假,假,真正)。C#尋找更有效的方法來存儲和比較真/假值列表
我還需要能夠快速比較任何兩個這些不等長度的列表(即相同的值以相同的順序)。通過這種情況下的不等式,我的意思是,對於一個數據集而言,真正的插槽在另一個數據集中的相同插槽中不能具有任何匹配的真值。錯誤的值是無關緊要的。例如:
- 10010和10001是「相等」,因爲在這兩個值的第一個時隙是 真
- 00100和00001是「不等於」,因爲沒有真正值的 秋天在相同時隙
- 00000和00000也「不等於」因爲 既沒有任何真正的價值
的比較是遍地做一次需要儘可能以最快和最有效的記憶方式來完成。對於給定的數據集,最初的創建過程將只運行一次,因此效率在比較過程中是次要的。
我已經嘗試過使用位置布爾比較以及字符串(「100101」格式)做循環位置char值比較的布爾值數組和排序列表。但似乎應該有更多的處理器和內存有效的方式來存儲和比較這些值列表。
字符串比較版本的示例。數組和列表進行比較遵循相同的模式:
private bool DoListsConflict(string activeValuesA, string activeValuesB)
{
var lengths = new int[3] {10000, activeValuesA.Length, activeValuesB.Length};
var a = activeValuesA.ToCharArray();
var b = activeValuesB.ToCharArray();
for (var x = 0; x < lengths.Min(); x++)
{
if (a[x] == '1' && b[x] == '1') return true;
}
return false;
}
我已經看了this question其答案表明BitArrays,但建議的答覆還指出,它不一定是有效的,我不知道這會比我已經做的更好。是否有更高效的結構可以用來加速整個過程?
顯示代碼,一些努力看比什麼更有效率。 – mybirthname
我沒有添加代碼,因爲我覺得我清楚地在接下來的段落中解釋了我目前的流程。如果有人看到我發佈一個for循環或兩個迭代通過一對數組或列表來比較網絡上數百萬次的值,我很樂意這樣做。 – BBlake
添加代碼示例 – BBlake