У меня есть два списка типа list<int>
, и я знаю, что мы можем найти общие элементы между двумя списками. Но есть ли способ получить общие элементы и соответствующие индексы общих элементов в перекрестном списке или мне нужно пройти через каждый элемент, чтобы найти индексы.Получить общие элементы с индексом из двух списков C#
ответ
LINQ имеет операции по проецированию последовательности с использованием индексов, но это не встроено в синтаксис выражения запроса, поэтому для начала необходимо использовать «обычные» вызовы метода расширения. После того, что это довольно легко, хотя, вероятно, так же просто, не используя LINQ, если честно:
var pairs1 = list1.Select((value, index) => new { value, index });
var pairs2 = list2.Select((value, index) => new { value, index });
var matches = from pair1 in pairs1
join pair2 in pairs2 on pair1.value equals pair2.value
select new
{
Value = pair1.value,
Index1 = pair1.index,
Index2 = pair2.index
};
(Вы можете использовать from pair2 in pairs2 where pair1.value == pair2.value
, если вы предпочитаете ...)
Или не-LINQ (с использованием Tuple<,,>
для простоты, другие варианты возможны):
var results = new List<Tuple<int, int, int>>();
for (int index1 = 0; index1 < list1.Count; index1++)
{
for (int index2 = 0; index2 < list2.Count; index2++)
{
if (list1[index1] == list2[index2])
{
results.Add(Tuple.Of(list1[index1], index1, index2);
}
}
}
Обратите внимание, что в отличие от обычной операции пересечения, оба они могут дать вам несколько результатов для того же значения - потому что может быть несколько пар индексов. Например, со списками { 1, 2 }
и {2, 2, 0}
у вас есть кортежи (значение = 2, index1 = 1, index2 = 0), (значение = 2, index1 = 1, index2 = 1).
Я просто использовал этот ответ, чтобы создать новый объект из строки json, который я использовал из узла rest api. Это круто. Еще раз спасибо за сохранение дня @ Jon Skeet! –
попытка ниже кода
List<int> lstA = new List<int>() { 10, 2, 7, 9, 13, 21, 17 };
List<int> lstB = new List<int>() { 2, 10, 7, 21, 13, 9, 17 };
var lstA_Temp = lstA.Select((value, index) => new { index, value }).ToList();
var lstB_Temp = lstB.Select((value, index) => new { index, value }).ToList();
List<int> result = (from A in lstA_Temp from B in lstB_Temp
where A.index == B.index where A.value == B.value
select A.value).ToList();
вы также можете сделать это вещь без LINQ см ниже логики
List<int> lstA = new List<int>() { 10, 2, 7, 9, 13, 21, 17 };
List<int> lstB = new List<int>() { 2, 10, 7, 21, 13, 9, 17 };
List<int> lstResult = new List<int>();
for (int i = 0; i < lstA.Count; i++)
{
if (lstA[i] == lstB[i])
lstResult.Add(lstA[i]);
}
Обратите внимание, что если вы соответствуете индексу, было бы проще использовать 'Zip' IMO. –
- 1. Найти общие элементы из двух списков (с PhoneNumber) в android
- 2. Общие элементы списка списков списков
- 3. Найдите общие элементы из двух списков (с PhoneNumberUtils.compare)
- 4. Общие элементы из множества списков
- 5. общие элементы в массиве с его индексом
- 6. Соответствующие элементы из двух списков
- 7. комбинировать элементы из двух списков
- 8. Удалить элементы из двух списков
- 9. Как получить общие элементы из списка C#
- 10. поочередно добавляющие элементы из двух списков
- 11. Элементы, общие для большинства списков
- 12. объединение двух списков с индексом мудрого
- 13. Как совместить элементы двух списков в C#?
- 14. Получить элементы из списка списков
- 15. Подрядные элементы из двух разных списков
- 16. Найти общие узлы из двух связанных списков с помощью рекурсии
- 17. Найти общие элементы в списке списков строк
- 18. Найти общие элементы в списке списков
- 19. получить только уникальные элементы из двух списков питона
- 20. python слияние двух списков (четные/нечетные элементы)
- 21. Как найти общие элементы в списке списков?
- 22. Получить строку [] элементы с индексом ИНТ [] индексов
- 23. Как объединить элементы из двух списков
- 24. Как удалить общие значения из двух строковых списков
- 25. Общие элементы в двух списках с дубликатами
- 26. Составьте список из двух списков
- 27. Как сравнить элементы двух списков с linq?
- 28. Общие элементы из BST
- 29. Как объединить элементы из двух списков с помощью scala?
- 30. Как совпадают элементы из двух списков в scala?
Можете ли вы показать код, а также показать пример? –
Вы еще что-нибудь пробовали? Вы, конечно же, можете * сделать это с LINQ, хотя я подозреваю, что это примерно столько же кода, сколько и без. –
Теперь есть два ответа, один из которых соответствует только тем, что значения одинаковы * и * индексы одинаковы, и один из них соответствует только значениям (дающим два индекса для каждого совпадения). Кого вы хотели? –