Nano Hash - криптовалюты, майнинг, программирование

С# - Как найти все элементы в SortedDictionary с похожими ключами?

У меня есть SortedDictionary:

static SortedDictionary<string, int> myDictionary = new SortedDictionary<string, int>();

где ключи представляют строки примерно так:

string key = someNumber + " " + row + " " + col + " " + someString;

Я хочу найти все элементы в отсортированном словаре, которые имеют определенную строку и столбец. Например, если у меня есть следующие ключи:

1 2 3 p 
3 2 3 p 
2 2 3 t 
5 1 6 p 
8 2 1 p 
7 2 3 t

Я хочу получить только те ключи, которые имеют row=2 и col=3:

1 2 3 p 
3 2 3 p 
2 2 3 t 
7 2 3 t
15.12.2012

Ответы:


1

К сожалению, в этом случае вам нужно перебрать всю коллекцию и выбрать элементы, соответствующие вашим критериям (поэтому не так много использования самого словаря):

public IList<int> FindValues(int row, int col)
{
    myDictionary
        .Where(item => MatchKey(item.Key, row, col))
        .Select(item => item.Value)
        .ToList();
}

public bool MatchKey(string key, int row, int col)
{
    var splitKey = key.Split();
    return splitKey[1] == row.ToString() && splitKey[2] == col.ToString();
    // or match the key according to your logic
}

Хотя, если вам нужно часто выполнять запросы по строкам и столбцам, лучше сначала создать другую структуру данных. Может быть

Dictionary<Coord, IList<int>> myDict;

Где Coord является классом/структурой (и переопределяет Equals, GetHashCode)

class Coord
{
    public int Row { get; set; }
    public int Column { get; set; }
}
15.12.2012
  • +1, я согласен с созданием отдельного класса/структуры для группировки объектов по строкам и столбцам. Я бы просто добавил к ответу AlexD две вещи: 1) Используйте Lookup<Coord, int> вместо DIctionary<Coords, IList<int>>. По сути то же самое, но мне с ним гораздо проще работать. 2) Не забудьте добавить методы Equals и GetHashCode в класс Coords, иначе Словарь/Справочник будет сравнивать только ссылки, что в данном случае нежелательно. 15.12.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..