C# сопоставление двух данных

  • Автор темы Автор темы Astraport
  • Дата начала Дата начала

Astraport

Client
Регистрация
01.05.2015
Сообщения
5 084
Реакции
4 633
Баллы
113
Имеем таблицу с данными. Несколько столбцов и тысячи строк.
В одном столбце имена повторяющиеся, например:
Джон
Фрэд
Фрэд
Майкл
Джон

И нужно мне добавить ещё один столбец из списка, чтобы брал случайные строки, но сопоставление имен сохранялось. Например:
Джон Иван
Фрэд Федя
Фрэд Федя
Майкл Миша
Джон Иван

И никак не могу найти простого решения задачи. Что посоветуете?
 
Имеем таблицу с данными. Несколько столбцов и тысячи строк.
В одном столбце имена повторяющиеся, например:
Джон
Фрэд
Фрэд
Майкл
Джон

И нужно мне добавить ещё один столбец из списка, чтобы брал случайные строки, но сопоставление имен сохранялось. Например:
Джон Иван
Фрэд Федя
Фрэд Федя
Майкл Миша
Джон Иван

И никак не могу найти простого решения задачи. Что посоветуете?
Брр, а в чем тут проблема ?

1. Выбираем только уникальные значения имен
2. Подставляем каждому уникальному имени что хотим
3. Обновляем все имена в таблице на подставленные
 
2. Подставляем каждому уникальному имени что хотим
Весь вопрос в этом. Цитирую заголовок "C# сопоставление двух данных". Какие классы или коллекции можно приспособить для этого?
 
в каждом столбце одинаковое количество строк?
 
Весь вопрос в этом. Цитирую заголовок "C# сопоставление двух данных". Какие классы или коллекции можно приспособить для этого?
Dictionary мб, 1 имя - ключ, 2 имя - значение. Если имя уже есть - берём по ключу, если нет - добавляем новый с рандомным 2 именем.
 
  • Оценить
Реакции: Astraport
Dictionary мб, 1 имя - ключ, 2 имя - значение. Если имя уже есть - берём по ключу, если нет - добавляем новый с рандомным 2 именем.
Ну вот что-то подобное я делал на другом языке, поэтому выше написал про коллекции, а на шарпе даже не знаю как лучше всё организовать.
 
Может кому пример кода понадобится, т. к. задача нужная, а решение не простое.
Работает быстро.
PHP:
Развернуть Свернуть Копировать
Dictionary<string, string> dict = new Dictionary<string, string>();
var t = project.Tables["a"];
var users = project.Lists["temp"];
var profiles = project.Lists["users"];

if (profiles.Count < users.Count) {
    return -1;
}
for (int k = 0; k < users.Count; k++) {
    dict.Add(users[k], profiles[k]);
}
string str = "";
for (int i = 0; i < t.RowCount; i++) {
    str = t.GetCell("C", i);
    foreach (KeyValuePair<string, string> pair in dict){
        if (pair.Key == str) {
            t.SetCell("E", i, pair.Value);
        }
    }
}
 
  • Оценить
Реакции: erbuz и ftbwork10
Может кому пример кода понадобится, т. к. задача нужная, а решение не простое.
Работает быстро.
PHP:
Развернуть Свернуть Копировать
Dictionary<string, string> dict = new Dictionary<string, string>();
var t = project.Tables["a"];
var users = project.Lists["temp"];
var profiles = project.Lists["users"];

if (profiles.Count < users.Count) {
    return -1;
}
for (int k = 0; k < users.Count; k++) {
    dict.Add(users[k], profiles[k]);
}
string str = "";
for (int i = 0; i < t.RowCount; i++) {
    str = t.GetCell("C", i);
    foreach (KeyValuePair<string, string> pair in dict){
        if (pair.Key == str) {
            t.SetCell("E", i, pair.Value);
        }
    }
}

Так чуть покороче, и побыстрее:
Код:
Развернуть Свернуть Копировать
var t = project.Tables["a"];
var users = project.Lists["temp"].ToArray();
var profiles = project.Lists["users"].ToArray();

if (profiles.Length < users.Length)
    return -1;

for (int i = 0; i < t.RowCount; i++)
{
    var idx = Array.BinarySearch(users, t.GetCell("C", i));
    if (idx >= 0)
        t.SetCell("E", i, profiles[idx]);
}
 
Последнее редактирование:

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)