как получить одну запись из hashmap без итерации - PullRequest
156 голосов
/ 02 октября 2009

Существует ли элегантный способ получения только одного Entry<K,V> из HashMap без итерации, если ключ не известен.

Так как порядок ввода записи не важен, можем ли мы сказать что-то вроде

hashMapObject.get(zeroth_index);

Хотя я знаю, что такого метода get by index не существует.

Если бы я попробовал подход, упомянутый ниже, ему все равно пришлось бы получить весь набор записей хэш-карты .

for(Map.Entry<String, String> entry : MapObj.entrySet()) {
    return entry;
}

Предложения приветствуются.

РЕДАКТИРОВАТЬ: Пожалуйста, предложите любую другую структуру данных для удовлетворения требований.

Ответы [ 14 ]

2 голосов
/ 28 марта 2014

Наткнулся здесь, ища то же самое ... Затем я вспомнил класс Iterables из библиотеки Гуава .

Чтобы получить «первый» элемент: Iterables.getFirst( someMap.values(), null );.
По сути, делает то же самое, что и Map.values().iterator().next(), но также позволяет вам указать значение по умолчанию (в данном случае ноль), если на карте ничего нет.

Iterables.getLast( someMap.values(), null ); возвращает последний элемент на карте.

Iterables.get( someMap.values(), 7, null ); возвращает седьмой элемент на карте, если он существует, в противном случае используется значение по умолчанию (в данном случае ноль).

Помните, что HashMaps не упорядочены ... поэтому не ожидайте, что Iterables.getFirst вернет первый элемент, который вы там бросили ... также с Iterables.getLast. Возможно, полезно получить a сопоставленное значение, хотя.

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

1 голос
/ 02 октября 2009

После вашего редактирования, вот мое предложение:

Если у вас есть только одна запись, вы можете заменить карту на двойной объект. В зависимости от типов и ваших предпочтений:

  • массив (из 2 значений, ключ и значение)
  • простой объект с двумя свойствами
0 голосов
/ 05 июля 2018
map<string,string>m;
auto it=m.begin();//get iterator to the first element of map(m)
return m->first;//return first string(1st string in map<string,string>m)
//Incase you want the second string 
//you can use return m->second(2st string in map<string,string>m)
//if you want to iterate the whole map you can use loop
for(auto it:m)//m is a map
   cout<<it->first<<endl;
0 голосов
/ 17 ноября 2015

Я получил ответ: (Это просто)

Возьмите ArrayList, затем разыграйте его и найдите размер массива. Вот оно:

    ArrayList count = new ArrayList();
    count=(ArrayList) maptabcolname.get("k1"); //here "k1" is Key
    System.out.println("number of elements="+count.size());

Покажет размер. (Дать предложение). Работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...