如何在数组中获得重复元素的索引…
本文关键字:元素 索引 数组 | 更新日期: 2023-09-27 18:12:21
我试图找到存储在数组中的元素的索引,有些元素是重复出现的,当我试图得到这些元素的索引时它总是给出第一个元素的索引。如:
int[] arr = {3,5,6,7,2,3,11,14 };
int index = Array.IndexOf(arr, 3);
Console.WriteLine(index);
Console.ReadLine();
当我想让3的索引为5时,它仍然给出0。我不能跳过逻辑中的元素,我必须每次检查程序中的每个元素。请帮忙,如果有人可以。
问候。
有一个超载的IndexOf
数组接受一个起始索引。使用第一项的索引查找下一项:
int[] arr = {3,5,6,7,2,3,11,14 };
int index = Array.IndexOf(arr, 3);
Console.WriteLine(index);
int index2 = Array.IndexOf(arr, 3, index + 1);
Console.WriteLine(index2);
Console.ReadLine();
我假设您正在搜索的解与搜索项在数组中出现的时间无关。在这种情况下,您需要一个循环,在其中对找到的
的当前项执行工作。int[] arr = {3,5,6,7,2,3,11,14 };
int index = -1;
while((index = Array.IndexOf(arr, 3, index + 1)) != -1)
{
Console.WriteLine(index);
}
数组。IndexOf(array, object, startindex)重载将完全按照您的期望工作
Try:
int[] arrRepaetInd = new int[arr.Length];
int j=0,cnt=0;
for(int i=0;i<arr.Length;i++)
{
j++;
if(arr[i]==arr[i+1]
{
cnt++;
arrRepaetInd[cnt]=arr[i];
Console.WriteLine(arrRepaetInd[cnt]);
}
}
arrepaetind数组有重复元素的索引
你想使用Select + filter
public int[] IndexesOf<T>(T[] Values, T find) {
return Values.Select((i,index) => new { index = index, value = i})
.Where(x => x.value == find)
.Select(x => x.index)
.ToArray();
}
或甚至作为扩展方法
public static class MyExtensions {
public static int[] IndexesOf<T>(this T[] Values, T find) {
return Values.Select((i,index) => new { index = index, value = i})
.Where(x => x.value == find)
.Select(x => x.index)
.ToArray();
}
}
然后你可以做
var indexes = arr.IndexesOf(3);
您可以使用LINQ
和Select(IEnumerable<TSource>, Func<TSource, Int32, TResult>)
-这是MSDN链接。
var indexes = arr.Select((i, index) => new { Number = i, Index = index }).Where(x => x.Number == 3).Select(x => x.Index).ToArray();
然后获得最后一个索引(如果这是你想要的)使用LastOrDefault()
,而不是ToArrray
。
你可以有一个类来实现IEnumerable并返回你想要的索引:
public class Traverse<T> : IEnumerable<int>
{
T[] _list;
T _value;
public Traverse(T[] list, T value)
{
this._list = list;
this._value = value;
}
public IEnumerator<int> GetEnumerator()
{
for (int i = 0; i < _list.Length; i++)
if (_list[i].Equals(_value))
yield return i;
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
并像这样使用:
int[] arr = { 3, 5, 6, 7, 2, 3, 11, 14 };
foreach (var index in new Traverse<int>(arr, 3))
Console.WriteLine(index.ToString());
输出:05