比方說,我有一個int數組:如何使用其他集合來替換集合中的一系列項目?
var source = new int[] { 1, 2, 3, 4, 5 };
我想用這些陣列來替代它的一部分:
var fromArray = new int[] { 1, 2 };
var toArray = new int[] { 11, 12 };
我需要製作使用上述陣列的輸出是:11, 12, 3, 4, 5
。
在更高級的場景,我可能還需要更換使用多個參數源。認爲fromArray
和toArray
是從Dictionary<int[], int[]>
來:
IEnumerable<T> Replace(IEnumerable<T> source,
IDictionary<IEnumerable<T>, IEnumerable<T>> values)
{
// "values" parameter holds the pairs that I want to replace.
// "source" can be `IList<T>` instead of `IEnumerable<T> if an indexer
// is needed but I prefer `IEnumerable<T>`.
}
我怎樣才能做到這一點?
編輯:項目的的順序很重要。認爲它像String.Replace
;如果fromArray
的全部內容不存在source
(如果源只有1
而不是2
,例如)的方法不應試圖取代它。舉個例子:
var source = new int[] { 1, 2, 3, 4, 5, 6 };
var dict = new Dictionary<int[], int[]>();
// Should work, since 1 and 2 are consecutive in the source.
dict[new int[] { 1, 2 }] = new int[] { 11, 12 };
// There is no sequence that consists of 4 and 6, so the method should ignore it.
dict[new int[] { 4, 6 }] = new int[] { 13, 14 };
// Should work.
dict[new int[] { 5, 6 }] = new int[] { 15, 16 };
Replace(source, dict); // Output should be: 11, 12, 3, 4, 15, 16
PS,你的簽名是不完全正確,變化值具有的IEnumerable的鍵 –
2012-08-11 09:10:15
@MAfifi - 我不明白,爲什麼呢? – 2012-08-11 09:13:11
您將嘗試使用類型T對數組進行索引。這不起作用,因爲索引器總是期望它是一個整數。看我下面的例子。 – 2012-08-11 09:25:01