var multiples = from i in Enumerable.Range(min, (max - min))
from r in roots
where i % r == 0
select i;
例如,如果roots = {2,10}
它會選擇20
兩次。C#試圖避免重複
在這裏可以避免重複嗎?
var multiples = from i in Enumerable.Range(min, (max - min))
from r in roots
where i % r == 0
select i;
例如,如果roots = {2,10}
它會選擇20
兩次。C#試圖避免重複
在這裏可以避免重複嗎?
可以使用Any()
,而不是一個完整的笛卡兒連接:
var multiples = from i in Enumerable.Range(min, (max - min))
where roots.Any(r => i % r == 0)
select i;
這有額外的好處,它會在roots
儘快停止測試部分,因爲它找到一個成功,並且不需要第二次傳遞就可以提取不同的元素。
在這種情況下,它確實比'.Distinct()'聰明。 – 2013-03-08 07:00:27
這就是我正在尋找的!很酷! – user1376243 2013-03-08 07:02:18
@JeppeStigNielsen噢。一個好的。當人們需要時間來真正思考在問題中正在做什麼時,會發生這種情況。 – 2013-03-08 07:08:01
使用Distinct
var multiples = (from i in Enumerable.Range(min, (max - min))
from r in roots
where i % r == 0
select i).Distinct();
這非常適用於簡單的類型,如string
和int
。
匿名類型不太好。
在你的情況下,i
是一個int
,因此它應該很好地解決dublicates。
編輯
它確實 INFACT適用於匿名類型(見葉普的評論)。因爲@Jeppe說匿名類型有一個「好」Equals
enabeling Distict
來確定對象是否相等/ dublicates。
非常感謝您的回答! – user1376243 2013-03-08 07:00:19
@ user1376243如果解決了您的查詢,請點擊勾號接受答案。 – 2013-03-08 07:05:28
你:對匿名類型不太適用它('.Distinct()')在匿名類型上效果很好,只要anonumous類型的每個屬性的類型都是一個帶有「good」'Equals'和'GetHashCode'實現的類型。匿名類型將(自動)具有「Equals」和「GetHashCode」,它們實現了「座標式」的相等比較。 – 2013-03-08 07:15:16
使用DISTINCT
var multiples = (from i in Enumerable.Range(min, (max - min))
from r in roots
where i % r == 0
select i).Distinct();
請使用Distinct()
方法
var multiples = (from i in Enumerable.Range(min, (max - min))
from r in roots
where i % r == 0
select i).Distinct();
如果你使用'multiples.Distinct()'之後,將不包含重複。 – 2013-03-08 06:52:44