Получите Список <> положение элемента в c# с помощью LINQ

В настоящее время у Вас нет способа знать то, что передается в метод. Можно преобразовать его в общий метод. Как это:

public void GetParameterValue<T>(out T destination) { ... }

50
задан Spencer Ruport 10 July 2009 в 06:16
поделиться

7 ответов

var list = new List<int> { 3, 1, 0, 5 };
int pos = list.IndexOf(list.Min()); // returns 2
73
ответ дан 7 November 2019 в 10:39
поделиться

Поскольку вы специально просили решение LINQ, и все, что у вас было, это решения, отличные от LINQ, вот решение LINQ:

List<int> values = new List<int> { 3, 1, 0, 5 };

int index =
   values
   .Select((n, i) => new { Value = n, Index = i })
   .OrderBy(n=>n.Value)
   .First()
   .Index;

Это, однако, не означает, что LINQ является лучшим решением для эта проблема ...

Редактировать:

С немного более сложным кодом это работает немного лучше:

int index =
   values
   .Select((n, i) => new { Value = n, Index = i })
   .Aggregate((a,b) => a.Value < b.Value ? a : b)
   .Index;

Чтобы получить лучшую производительность, вы должны использовать простой цикл и пройти по элементам, пока вы отслеживаете из низшего:

int index = 0, value = values[0];
for (int i = 1; i < values.Length; i++) {
  if (values[i] < value) {
    value = values[i];
    index = i;
  }
}
39
ответ дан 7 November 2019 в 10:39
поделиться
var data = new List<int> { 3, 1, 0, 5 };

var result = Enumerable.Range(0, data.Count).OrderBy(n => data[n]).First();
2
ответ дан 7 November 2019 в 10:39
поделиться
List<int>.Enumerator e = l.GetEnumerator();
int p = 0, min = int.MaxValue, pos = -1;
while (e.MoveNext())
{
    if (e.Current < min)
    {
        min = e.Current;
        pos = p;
    }
    ++p;
}
-1
ответ дан 7 November 2019 в 10:39
поделиться
List<int> data = new List<int>();
data.AddRange(new[] { 3, 1, 0, 5 });
Console.WriteLine(data.IndexOf(data.Min()));
0
ответ дан 7 November 2019 в 10:39
поделиться
int min = 0;
bool minIsSet = false;

var result = ints
  .Select( (x, i) => new {x, i}
  .OrderBy(z => z.x)
  .Select(z => 
  {
    if (!minIsSet)
    {
      min = z.x;
      minIsSet = true;
    }
    return z;
  }
  .TakeWhile(z => z.x == min)
  .Select(z => z.i);
0
ответ дан 7 November 2019 в 10:39
поделиться

Facebook.com

  • MySQL с MyRocks . Используется для хранения информации о пользователях и социальных действий, таких как лайки, комментарии и публикации.
  • Hive (хранилище данных для Hadoop, поддерживает таблицы и вариант SQL, называемый hiveQL). Используется для «простых задач суммирования, бизнес-аналитики, машинного обучения и многих других приложений»
  • Cassandra (многомерное распределенное хранилище ключей и значений). В настоящее время используется для обмена личными сообщениями Facebook.

В настоящее время работает 610 (скоро будет 1000) узлов Hadoop в одном кластере с хранилищем данных Hive. И Hive, и Cassandra были открыты в Facebook.

Статистика Facebook:

0
ответ дан 7 November 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: