我想要得到一個數組的索引,我已經用Array.IndexOf(array, value)
完成了。這適用於一個值,但我希望每次出現該值並將索引存儲到另一個數組中。例如,名稱'tom'在數組中出現5次,我想要查找每個索引位置。得到一個數組的索引多次,然後將它們存儲在一個數組中c#
1
A
回答
3
1
您可以使用LINQ的Select
過載,它使用元素的索引,以及像:
var indices = stringArray.Select((s, i) => new {Value = s, Index = i})
.Where(r => r.Value == "tom")
.Select(r => r.Index);
2
如果我沒有記錯的話,你可以在其他參數添加到IndexOf()
,這將讓您指定在數組中開始。這應該給你或多或少你所需要的:
var indices = new List<int>();
int i = Array.IndexOf(array, val);
while(i > -1){
indices.Add(i);
i = Array.IndexOf(array, val, i+1);
}
// ... and if it is important to have the result as an array:
int[] result = indices.ToArray();
實例:
var array = new int[]{ 1, 2, 3, 3, 4, 5, 3, 6, 7, 8, 3};
int val = 3;
var indices = new List<int>();
int i = Array.IndexOf(array, val);
while(i > -1){
indices.Add(i);
i = Array.IndexOf(array, val, i+1);
}
// ... and if it is important to have the result as an array:
int[] result = indices.ToArray();
編輯:剛剛意識到一個while循環可能比for循環更清潔了很多這個。
編輯2:由於大衆需求(見下文評論),here`s原來的靚麗無基本的循環,只是重新引入您的閱讀快感:
for(int i = Array.IndexOf(array, val); i > -1; i = Array.IndexOf(array, val, i+1)){
indices.Add(i);
}
2
可以創建一個擴展方法來做到這一點
namespace Extensions
{
public static class ArrayExtension
{
public static IEnumerable<int> GetIndicesOf<T>(this T[] target, T val, int start = 0)
{
EqualityComparer<T> comparer = EqualityComparer<T>.Default;
for (int i = start; i < target.Length; i++)
{
if (comparer.Equals(target[i], val))
{
yield return i;
}
}
}
}
}
添加using語句命名空間w^ith擴展方法using Extensions;
在您要調用它的文件中。
然後調用它只需執行以下操作即可獲取索引。
IEnumerable<int> indices = array.GetIndicesOf(value);
,或者得到一個數組只是做
int[] indicies = array.GetIndicesOf(value).ToArray();
3
該解決方案是像以前的一個,但運行速度更快:
string value = "tom";
int[] indices = stringArray.Where(s => s != null)
.Select((s, i) => s.Equals(value) ? i: -1)
.Where(i => i >= 0)
.ToArray();
相關問題
- 1. 生成50個隨機數並將它們存儲到一個數組中C++
- 2. 在一個類中存儲char數組然後返回它
- 3. C - 在一個2d char *數組中存儲多個char數組
- 4. 獲取按鈕並將它們存儲在一個數組中
- 5. 得到一個數組的索引
- 6. 將數組中的第一個元素存儲在另一個數組中,如果它們存在
- 7. 將char數組存儲到另一個數組中 - c
- 8. C通過指針將多個int數組存儲到另一個數組中
- 9. 在一個數組中的多個數組中存儲多個數組Python/Numpy
- 10. 將多個函數的數據存儲在一個數組中
- 11. PHP從多維數組中找到值,然後將它們放在一個數組中
- 12. 將數組存儲在另一個數組中C
- 13. 將幾個單詞存儲在會話數組中,然後顯示它們
- 14. 在一個數組中輸入Floats然後將它們加在一起
- 15. 如何在Zend Lucene中將一個數組數組存儲到一個索引文檔中?
- 16. 在rdlc split(winform)得到數組的最後一個索引值
- 17. 如何在另一個數組中搜索一個數組,然後將結果放入第三個數組中?
- 18. 使用它們的索引號一次對多個數組進行排序?
- 19. 一維數組中的多個索引
- 20. 將多個值保存在一個會話變量中,然後檢索它們
- 21. 索引一個索引數組的多維numpy數組
- 22. 引用到對價值的一個數組列表,然後比較它們
- 23. 我想從用戶那裏得到所需的整數數量並將它們存儲到一個數組中
- 24. 將多個foreach循環存儲到一個數組中
- 25. 正在下載將圖像解析爲數組,然後將它們追加到另一個數組中
- 26. 存儲一個對象到數據庫,然後再次檢索它
- 27. 取出一串字符串並將它們存儲在一個數組中
- 28. 數組列表存儲到在c#另一個數組列表
- 29. 將整數和數組存儲在一個文件中並讀取它們
- 30. PHP - 計數$ _POST項目並將它們存儲在一個數組中
這是一個任務,而不是一個問題。你有什麼嘗試?你面臨什麼問題? – Dmitry 2015-03-31 16:51:33
(你可能想使用LINQ與'Where',btw ...) – 2015-03-31 16:53:33
@JonSkeet如果他想要索引,他不會(在技術上他可以,因爲哈比卜寫的,但它是一個很大的彎路) – xanatos 2015-03-31 16:53:54