Я хочу знать, есть ли способ сохранить значение перечислителя пар ключевых значений, итерации через словарь. Я хочу сохранить ключ и значение перечислителя в некоторой переменной. Каково решение? То, что я хотел сделать, - это повторить через словарь, чтобы иметь ссылку на текущую пару ключевых значений и следующую пару ключевых значений в словаре. Я не знаю, почему он не работает.Словарь итератор в C#
Вот как могло бы выглядеть решение:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Diagnostics;
namespace WellPuzzle
{
class Solution
{
Hashtable h1 = new Hashtable();
List<int> listofitemstoremove = new List<int>();
Dictionary<int, int> d1 = new Dictionary<int, int>();
public void falling_disks(int[] A, int[] B)
{
var itemstoremove = new List<int>();
var en = d1.GetEnumerator();
int count = 0;
for (int i = 0; i <= A.Length - 1; i++)
{
d1.Add(count++, A[i]);
}
//for each incoming element in array
foreach (int ele in B)
{
//store prev as current position of enumerator
var prev = new KeyValuePair<int, int>();
prev = en.Current;
//check if it is possible to iterate to next element in dictionary
if (en.MoveNext())
{
//loop till end of dictionary
while (en.MoveNext())
{
//if current value of enumerator in dictionary is less than incoming element and check if corroesponding key for that value is in hashtable or not
if (en.Current.Value <= ele && !(checkifthatvalueisfilled(en.Current.Key)))
continue;
else
{//if current enumerator value is greater than incoming element from array B then remove all elements from prev reference till end of dictionary
h1.Add(en.Current.Key, true);
listofitemstoremove.Add(en.Current.Key);
}
prev = en.Current;
}
if (!(h1.ContainsKey(en.Current.Key)))
{
h1.Add(en.Current.Key, true);
listofitemstoremove.Add(en.Current.Key);
}
}
else
{
h1.Add(prev.Key, true);
listofitemstoremove.Add(prev.Key);
}
foreach (int item in listofitemstoremove)
{
for (int i = item; i < d1.Count; i++)
{
d1.Remove(i++);
}
}
}
Console.WriteLine(h1.Count);
}
public bool checkifthatvalueisfilled(int value)
{
if (h1.ContainsValue(h1.ContainsKey(value)) == true)
return true;
else return false;
}
}
class Program
{
static void Main(string[] args)
{
int[] A = new int[] { 5, 6, 4, 3, 6, 2, 3 };
int[] B = new int[] { 2, 3 };
Solution s1 = new Solution();
s1.falling_disks(A, B);
}
}
}
Ваш код написанный? Конечно нет. У вас есть 'en', который вводится в IEnumerator, который используется для хранения KeyValuePair, и у вас есть' next', пытающийся сохранить результат метода возврата пустоты. Что вы на самом деле пытаетесь достичь? Конец, а не средства. –
Кажется, что вы пытаетесь лечить словарь как нечто, имеющее нумерационный счетчик (или в порядке). Не делай этого. В зависимости от того, что вы хотите, посмотрели, будет ли работать многомерный массив 'int [,]'? – Earlz
похоже, что вы пытаетесь установить текущую позицию перечислителя, подобно тому, как вы устанавливаете указатель на C++. Если это то, что вы хотите, это невозможно в C#; вы можете переместить перечислитель только на следующий элемент; вы не можете просто установить его на какой-то произвольный элемент. – Servy