C#
- 73 ответа
- 0 вопросов
86
Вклад в тег
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="..." Version="..." />
...
</ItemGroup>
...
</Project>
var inputArray = new[] { 1, 2, 3, 4, 5, 4, 3, 2, 1 };
var set = new Dictionary<int, int>();
foreach (var val in inputArray)
{
if (!set.ContainsKey(val))
{
set.Add(val, 1);
}
else
{
set[val] = set[val] + 1;
}
}
var result = new List<int>();
foreach (var val in set)
{
if (val.Value == 1)
{
result.Add(val.Key);
}
}
return result; //[5]
как я понимаю если я буду менять значения в Dictionary1 то они будут меняться и в 2 и 3 словарях?
но если я буду менять значения в 2 и 3 словарях они не будут затрагивать друг друга?
то есть меняя значения в 2 словаре это никак не отразится на 3 словарь, я правильно понимаю?
А то просто во недавно столкнулся с такой проблемой что присвоил один словарь другому Dictionary2 = Dictionary1 потом 1й очистил и 2й автоматом тоже оказался очищенным
private Dictionary<string, ClassTest> Dictionary1 // переменная Dictionary1 типа Dictionary<>
= new Dictionary<string, ClassTest>(); //которая ссылается на объект Dictionary [id=1]
private Dictionary<string, ClassTest> Dictionary2 // переменная Dictionary2 типа Dictionary<>
= new Dictionary<string, ClassTest>(); //которая ссылается на объект Dictionary [id=2]
private Dictionary<string, ClassTest> Dictionary3 // переменная Dictionary3 типа Dictionary<>
= new Dictionary<string, ClassTest>(); //которая ссылается на объект Dictionary [id=3]
//Dictionary1 -заполняем данными
Dictionary2 = Dictionary1; //переменная Dictionary2 теперь ссылается туда-же, куда и переменная Dictionary1,
// т.е на Dictionary [id=1]
Dictionary3 = Dictionary1; //переменная Dictionary3 теперь ссылается туда-же, куда и переменная Dictionary1,
// т.е на Dictionary [id=1]
// a объекты Dictionary [id=2] и Dictionary [id=3] будут собраны сборщиком мусора, т.к. они больше не нужны
а как мне сделать 2 словаря по типу 1го, то есть у меня есть 1й словарь шаблон, я хочу чтобы 2й и 3й словари изначально так же и выглядели (имели все те же данные), но далее данные в них менялись независимо друг от друга?
var dict1 = new Dictionary<int, int>()
{
[1] = 2,
};
var dict2 = new Dictionary<int, int>(dict1);
dict1.Add(2, 3);
dict2.Add(2, 1);
var log = new Action<Dictionary<int,int>>((dict) =>
{
Console.WriteLine(string.Join(", ", dict.Select(c => $"{c.Key}={c.Value}")));
});
log(dict1); //1=2, 2=3
log(dict2); //1=2, 2=1