2013-04-22 2 views
2

Мне интересно, как я могу заменить значения int в словаре на C#. Значения будут выглядеть примерно так.Как заменить значения int в словаре C#

  • 25,12
  • 24,35
  • 12,34
  • 34,12

мне было интересно, как я мог бы заменить только одну строку. Например, если бы я хотел заменить первую строку новым значением 12,12. И он не заменит никаких других значений «12» в словаре.

+0

Просьба показать код - невозможно догадаться, что без него не работает. –

+0

Это не имеет смысла. Что вы подразумеваете под заменой? В каком словаре вы говорите? Это 'Словарь '? В этом случае: вы можете иметь только одну запись на ключ. –

+0

Надеюсь, вы имеете в виду один объект за ключ. поскольку объект value может быть списком или массивом. (Не быть разборчивым ^^) –

ответ

1

Вы не можете заменить первую строку 12, 12, потому что есть еще одна ключевая пара значений с 12 как ключ. И вы не можете дублировать ключи в словаре.

В любом случае вы можете делать такие вещи, как это:

Dictionary<int, int> myDictionary = new Dictionary<int, int>(); 
myDictionary.Add(25, 12); 
myDictionary.Add(24, 35); 

//remove the old item 
myDictionary.Remove(25); 

//add the new item 
myDictionary.Add(12, 12); 

EDIT: если вы собираетесь сэкономить х, у позиции я хотел бы предложить вам создать класс с именем точки и использовать List<Point>. Вот код:

class Point 
{ 
    public double X {get; set;} 
    public double Y {get; set;} 

    public Point(double x, double y) 
    { 
     this.X = x; 
     this.Y = y; 
    } 
} 

Тогда:

List<Point> myList =new List<Point>(); 
myList.Add(new Point(25, 13)); 
+0

Был ли другой способ сделать это (не используя словарь)? – user2306087

+1

@ user2306087 Что вы ищете? –

+0

То, что я хочу использовать, использует позиции x и y, и если у меня одинаковые X или Y, я не хочу, чтобы он заменил неправильное значение. – user2306087

3

Dictionary<TInt, TValue> использует то, что известно как индексаторами. В этом случае они используются для доступа к элементам в словаре по ключу, поэтому:

dict[25] вернет 12.

Теперь, в соответствии с тем, что вы хотите сделать, нужно иметь ключ 12 и значение 12. К сожалению, вы не можете заменить записи в словаре по ключу, так что вы должны сделать, это:

if(dict.ContainsKey(25)) 
{ 
    dict.Remove(25); 
} 
if(!dict.ContainsKey(12)) 
{ 
    dict.Add(12, 12); 
} 

Примечание: В значениях, поставляемых, уже есть ключ-значение пара с 12 как ее ключом, поэтому вам не будет разрешено добавлять 12,12 в словарь, так как if(!dict.ContainsKey(12)) вернет false.

+0

Есть ли другой способ сделать это, не используя словарь? Потому что для чего мне нужно это делать, используйте позиции x и y, и если у меня есть тот же X или YI не хочет, чтобы он заменил неправильное значение. – user2306087

+0

'List >' или если вы используете System.Drawing, возможно, 'List '. – Corak

+0

« вы не можете заменить записи в словаре по ключу »- с помощью индексатора? Конечно, вы можете. Нет необходимости проходить через ContainsKey /! ContainsKey. Он все равно не позволяет вам иметь как 12,12, так и 12,34, конечно. – shambulator

0

В словарях ключи должны быть уникальными.

В случае, если ключ не обязательно должен быть уникальным, вы можете использовать List<Tuple<int, int>> или List<CustomClass> с CustomClass, содержащим два целых поля. Затем вы можете добавить или заменить способ, который вы хотите.

Смежные вопросы