ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2025ǯ11·î30Æü(Æü) 17:04:50ÍúÎò
¡¡C# 7 °Ê¹ß¡¢Ê£¿ô¤ÎÃͤòÊÖ¤·¤¿¤¤¾ìÌ̤Ǥϥ¿¥×¥ë (Tuple)¤¬¹¤¯»È¤ï¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
¤¿¤À¤·¡¢¸½ºß¤Î C# ¤Ç¡Ö¥¿¥×¥ë¡×¤È¸À¤¦¤È¡¢¼ÂºÝ¤Ë¤ÏµìÍè¤Î System.Tuple ¥¯¥é¥¹¤Ç¤Ï¤Ê¤¯¡¢¹½Â¤ÂΤΠSystem.ValueTuple ¤ò»Ø¤·¤Þ¤¹¡£
¡¡Unity ¤Ê¤É IL2CPP ¤òÍѤ¤¤¿´Ä¶¤Ç¤Ï¡¢¤³¤Î ValueTuple ¹½Â¤ÂÎ ¤Î°·¤¤Êý¤Ë¤è¤Ã¤Æ¤Ï¡¢»×¤ï¤Ì¡Ö̵¸Â¥ë¡¼¥×¡×¤ä¡Ö¥Õ¥ê¡¼¥º¡×¤¬È¯À¸¤¹¤ë¥±¡¼¥¹¤¬¤¢¤ê¤Þ¤¹¡£
¡¡¤³¤Îµ»ö¤Ç¤Ï¡¢¼ÂºÝ¤ËÁø¶ø¤·¤¿¸½¾Ý¤ò¤â¤È¤Ë¡¢ValueTuple ¤ÎÍøÍÑ»þ¤ÎÃí°ÕÅÀ¡¢°ÂÁ´¤Ê»È¤¤Êý¤È²óÈòºö¤ò¾Ò²ð¤·¤Þ¤¹¡£
| ·¿ | ̾Á°¶õ´Ö | ·¿¤Î¼ïÎà | µË¡ | ÆÃħ |
| System.Tuple<T1, T2> | System | ¥¯¥é¥¹ | Tuple.Create(1, "A") | »²¾È·¿¡£Immutable¡£¥Õ¥£¡¼¥ë¥É̾¤Ï Item1, Item2 |
| System.ValueTuple<T1, T2> | System | ¹½Â¤ÂÎ | (1, "A") | ÃÍ·¿¡£·ÚÎ̤ǹ⮡£C# 7°Ê¹ß¤Îɸ½àµË¡ |
¡¡¤Ä¤Þ¤ê¡¢¸½ºß¤è¤¯»È¤¦ (int, string) ¤Î¤è¤¦¤Ê¥¿¥×¥ë¤Ï¡¢ValueTuple ¹½Â¤ÂΤǤ¹¡£
»²¹Í¥µ¥¤¥È
MicroSoft ¸ø¼°¥ê¥Õ¥¡¥ì¥ó¥¹
ValueTuple ¹½Â¤ÂÎ
https://learn.microsoft.com/ja-jp/dotnet/api/syste...
¡¡¥á¥½¥Ã¥É¤ÎÌá¤êÃͤ˥¿¥×¥ë¤òÍøÍѤ·¤¿¾ì¹ç¤ËȯÀ¸¤¹¤ëÌäÂê¤Ç¤¹¡£
// ¥á¥½¥Ã¥É¤ÎÌá¤êÃͤˤâÃí°Õ
public static List<(int, int)> GetRewardList(int count) {
List<(int, int)> list = new();
for (int i = 0; i < count; i++) {
list.Add(GetReward()); // ¢«¡¡¡Unity IL2CPP ´Ä¶²¼¤Ç¤Ï¤³¤³¤ÇÄä»ß¤¹¤ë¤³¤È¤¬¤¢¤ë
}
return list; // ¢« ¢¤³¤³¤Ç¤âÄä»ß¡¦¥Õ¥ê¡¼¥º¤Î²ÄǽÀ¤¢¤ê
}
// Ê£¿ô²ó¸Æ¤Ó½Ð¤µ¤ì¤ë ValueTuple ¤ÎÌá¤êÃÍ
public static (int itemId, int count) GetReward() {
return (1001, 5);
}
¡¡ValueTuple ¹½Â¤ÂΤòÊ£¿ô²ó return ¤·¤ÆÀѤ߾夲¤ë·Á¤ä¡¢List ¤Î¤è¤¦¤Ê¥¸¥§¥Í¥ê¥Ã¥¯¹½Â¤¤¬¡¢IL2CPP ¥Ó¥ë¥É¤ä Unity Editor ¼Â¹Ô´Ä¶¤ÇÉÔ°ÂÄê¤Ë¤Ê¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
¡¡¤³¤ì¤Ï for ʸ¤ä List ¤òÍøÍѤ·¤Æ¤¤¤Ê¤¤¥±¡¼¥¹¤Ç¤â¡¢¥á¥½¥Ã¥É¤ÎÌá¤êÃͤòÊ£¿ô²óÍøÍѤ¹¤ë¥±¡¼¥¹¤Ç¤âȯÀ¸¤¹¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
Î㤨¤Ð HogeA ¥á¥½¥Ã¥É(Ìá¤êÃͤ¬¥¿¥×¥ë)¢ª HogeB ¥á¥½¥Ã¥É(Ìá¤êÃͤ¬¥¿¥×¥ë)¢ªHogeC ¥á¥½¥Ã¥É(Ìá¤êÃͤ¬¥¿¥×¥ë) ¤Î¤è¤¦¤Ê¡¢ºÆµ¢Åª¤Ê½èÍý¤Î¾ì¹ç¤Ç¤¹¡£
¡¡¥á¥½¥Ã¥É¤ÎÌá¤êÃͤ˥¿¥×¥ë¤òÍøÍѤ»¤º¡¢²¼µ¤Î¤è¤¦¤ËÌá¤êÃÍÍѤ˥¯¥é¥¹¤òÍѰդ·¡¢¤½¤ì¤ò¥¤¥ó¥¹¥¿¥ó¥¹¤·¤ÆÌ᤹¤³¤È¤ÇÌäÂê¤ò²óÈò¤Ç¤¤Þ¤¹¡£
¥¯¥é¥¹¤Ï»²¾È·¿¤Ê¤Î¤Ç¡¢IL2CPP¤Ç¤â°ÂÁ´¤Ë°·¤¨¤Þ¤¹¡£
/// <summary>
/// Ìá¤êÃÍÍѤΥ¯¥é¥¹
/// </summary>
[Sysytem.Serialize]
public class GachaReward {
public int itemId;
public int count;
}
// Ìá¤êÃͤ⥿¥×¥ë¤Î List ¤Ç¤Ï¤Ê¤¯¤Æ¥¯¥é¥¹¤Î List ¤ËÊѤ¨¤ë
public static List<GachaReward> GetRewardList(int count) {
List<GachaReward> list = new();
for (int i = 0; i < count; i++) {
list.Add(GetReward());
}
return list;
}
// Ìá¤êÃͤò¥¯¥é¥¹¤ËÊѤ¨¤ë
public static GachaReward GetReward() {
return new GachaReward { itemId = 1001, count = 5 };
}
¡¡¤³¤Î¤è¤¦¤Ë¥á¥½¥Ã¥É¤ÎÌá¤êÃͤò¥¯¥é¥¹¡Ê»²¾È·¿¡Ë¤Ë¤¹¤ë¤È IL2CPP ¤Î¹½Â¤ÂÎ¥³¥Ô¡¼¤òÈò¤±¤é¤ì¡¢°ÂÄꤷ¤ÆÆ°ºî¤·¤Þ¤¹¡£
¡¡Ê£¿ô²ó¤ÎÌá¤êÃͤò·Ðͳ¤·¤Ê¤¤¾ì¹ç¤ä¡¢List<(int,int)> ¤ä Dictionary<T, (int, int)> ¤Î¤è¤¦¤Ê¥Í¥¹¥È¹½Â¤¤ÏÈò¤±¤ì¤Ð¡¢¥¿¥×¥ë¤âÌäÂê¤Ê¤¯ÍøÍѤǤ¤Þ¤¹¡£
// ñȯ¤ÎValueTuple¤Ï°ÂÁ´
public static (int itemId, int count) GetSingleReward() {
return (1001, 5);
}
¡¡ÆÃÄê¾ò·ï²¼¡Ê¥¸¥§¥Í¥ê¥Ã¥¯¡ÜLINQ¡Ü°ìÉôºÇŬ²½¡Ë¤Ç¥á¥â¥ê¥¢¥¯¥»¥¹ÉÔÀ°¹ç¤òµ¯¤³¤¹¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
List<GachaReward> rewards = GetRewardList(10); // Unity ¤Ç̵¸Â¥ë¡¼¥×¡¿¥Õ¥ê¡¼¥º¤¹¤ë¤³¤È¤¬¤¢¤ë List<(int itemId, int count)> tupleList = rewards.Select(r => (r.itemId, r.count)).ToList();
¡¡¤³¤Î .Select(...).ToList() ¤ÏÆâÉôŪ¤Ë ¥¤¥Æ¥ì¡¼¥¿¥¯¥é¥¹¡ÊMoveNext() ¤ò»ý¤Äƿ̾¹½Â¤ÂΡˤòÀ¸À®¤·¡¢¤½¤ÎÃæ¤ÇÂçÎ̤ΠValueTuple ¥³¥Ô¡¼¤òȯÀ¸¤µ¤»¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢IL2CPP ¤ÎºÇŬ²½¤È¤ÎÁȤ߹ç¤ï¤»¼¡Âè¤Ç¡¢¡Ö̵¸Â¥ë¡¼¥×¡×¡ÖUnity Editor ¤´¤È¥Õ¥ê¡¼¥º¡×¤Ë¤Ê¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
¡¡²¼µ¤ÎÊýË¡¤Ê¤é¡¢Ãæ´Ö¥¤¥Æ¥ì¡¼¥¿¤òÀ¸À®¤»¤º¡¢Ã±½ã¤Ê¥ë¡¼¥×¡Ü¹½Â¤ÂÎÀ¸À®¤À¤±¤ÇºÑ¤à¤¿¤á¡¢°ÂÁ´¤Ç°ÂÄꤷ¤Þ¤¹¡£
List<GachaReward> rewards = GetRewardList(10);
List<(int itemId, int count)> tupleList = new();
for (int i = 0; i < rewards.Count; i++) {
var reward = rewards[i]; // var ¤Ï GachaReward ·¿
tupleList.Add((reward.itemId, reward.count)); // ¤³¤³¤Ç¥¿¥×¥ë¤È¤·¤ÆÄɲÃ
}
¡¡¤³¤Î¸½¾Ý¤Î¸¶°ø¤Ç¤¹¤¬¡¢List<(int, int)> ¤Ï List<ValueTuple<int,int>> ¤ÈƱµÁ¤Ç¤¢¤ê¡¢¹½Â¤ÂΤΥꥹ¥È¤òÊÖ¤¹¤¿¤á¡¢Ìá¤êÃÍ»þ¤Ë¹½Â¤ÂÎÇÛÎó¤Î¥³¥Ô¡¼¤¬¹Ô¤ï¤ì¤Þ¤¹¡£
¤½¤ì¤¬¥Í¥¹¥È¤·¤¿¥á¥½¥Ã¥É¸Æ¤Ó½Ð¤·¤ä¡¢¥¸¥§¥Í¥ê¥Ã¥¯·Ðͳ¡ÊList<T>¡Ë¤Ë¤Ê¤ë¤È¡¢IL2CPP ¤Î¹½Â¤ÂÎ¥á¥â¥êÇÛÃÖºÇŬ²½¤¬ÇËþ¤·¤Æ¤·¤Þ¤¦¡©¤è¤¦¤Ç¤¹¡£
¡¡C#¡ÊMono¡Ë¾å¤Ç¤ÏÌäÂê¤Ê¤¤¤Ç¤¹¤¬¡¢IL2CPP ¤ä Burst ¥³¥ó¥Ñ¥¤¥é´Ä¶¤À¤È¡Ö¥¹¥¿¥Ã¥¯¤ÎÀ°¹çÀ¤¬Êø²õ ¢ª ¼Â¹ÔÄä»ß¡×¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¤³¤ÎÌäÂê¤Ï Unity 2021¡Á2022¡¢6000 °Ê¹ß¤Ç¤â°ÍÁ³¤È¤·¤ÆÈ¯À¸Î㤬¤¢¤ê¤Þ¤¹¡£
ÆÃ¤ËÈ󯱴ü½èÍý (async/await, UniTask) ¤ä LINQ ¤ÈÊ»ÍѤ·¤¿ ValueTuple ¤Î¾ì¹ç¤Ë¸²Ãø¤Ç¤¹¡£
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°




¥³¥á¥ó¥È¤ò¤«¤¯