Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ArrayUtils, Π° Π² Π½Π΅ΠΌ β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ CopyInsert(). ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π² Π΄ΡΡΠ³ΠΎΠΉ, Π²Π²ΠΎΠ΄Ρ ΠΏΠΎ Ρ ΠΎΠ΄Ρ Π΄Π΅Π»Π° Π½ΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅. ΠΠ΅ΡΠΎΠ΄ CopyInsert() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
// ΠΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°,
using System;
// ΠΠ»Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ². ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΌ,
class ArrayUtils {
// ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ², Π²Π²ΠΎΠ΄Ρ ΠΏΠΎ Ρ ΠΎΠ΄Ρ Π΄Π΅Π»Π° Π½ΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.
// ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΌ.
public static bool CopyInsert<T>(T e, uint idx,
T[] src, T[] target) {
// ΠΡΠΎΠ²Π΅ΡΠΈΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅Π»ΠΈΠΊ ΠΌΠ°ΡΡΠΈΠ²,
if (target.Length < src.Length + 1) return false;
// Π‘ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° src Π² ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ²,
// ΠΏΠΎΠΏΡΡΠ½ΠΎ Π²Π²Π΅Π΄Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΅ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ idx.
for (int i = 0, j = 0; i < src.Length; i++, j++) {
if (i == idx) {
target[j] = e;
j++;
}
target[j] = src[i];
}
return true;
}
}
class GenMethDemo {
static void Main() {
int[] nums = { 1, 2, 3 };
int[] nums2 = new int[4];
// ΠΡΠ²Π΅ΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° nums.
Console.Write("Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° nums: ");
foreach (int x in nums)
Console.Write(x + " ");
Console.WriteLine();
// ΠΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΡΠΈΠΏΠ° int.
ArrayUtils.CopyInsert(99, 2, nums, nums2);
// ΠΡΠ²Π΅ΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° nums2.
Console.Write("Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° nums2: ");
foreach (int x in nums2)
Console.Write(x + " ");
Console.WriteLine();
//Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅ΡΠΎΠ΄ copyInsert.
string[] strs = { "ΠΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΡ", "Π²Π΅ΡΡΠΌΠ°", "ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Ρ." };
string[] strs2 = new string[4];
// ΠΡΠ²Π΅ΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° strs.
Console.Write("Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° strs: ");
foreach (string s in strs)
Console.Write(s + " ");
Console.WriteLine();
// ΠΠ²Π΅ΡΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ.
ArrayUtils.CopyInsert("Π² Π‘#", 1, strs, strs2);
// ΠΡΠ²Π΅ΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° strs2.
Console.Write("Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° strs2: ");
foreach (string s in strs2)
Console.Write(s + " ");
Console.WriteLine();
// ΠΡΠΎΡ Π²ΡΠ·ΠΎΠ² Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ
// ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ double, Π° ΡΡΠ΅ΡΠΈΠΉ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΡΡΠΉ
// Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΡΠΈΠΏΠ° int.
// ArrayUtils.CopyInsert(0.01, 2, nums, nums2);
}
}
ΠΠΎΡ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° nums: 1 2 3
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° nums2: 1 2 99.3
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° strs: ΠΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π²Π΅ΡΡΠΌΠ° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Ρ.
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° strs2: ΠΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² C# Π²Π΅ΡΡΠΌΠ° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Ρ.
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ CopyInsert(). ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π°.
public static bool CopyInsert<T>(Π’ e, uint idx,
T[] src, T[] target) {
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°, Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΠΏΠΈΡΠΊΠΎΠΌ Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠ±ΡΠ°ΡΠΈΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ CopyInsert() ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΅Π³ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π‘Π»Π΅Π΄ΡΠ΅Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΈΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π»ΠΈΠ±ΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ, Π»ΠΈΠ±ΠΎ Π½Π΅ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ. Π ΡΡΠΎΠΌ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Π΄Π»Ρ Π½ΠΈΡ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ.
ΠΠ°Π»Π΅Π΅ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ CopyInsert() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ Main() Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΈ Π±Π΅Π· ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΈΠΏΠ°. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠΈΠΏΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, Π° ΡΠΈΠΏ Π’ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠ΄ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ. ΠΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΡ ΡΠΈΠΏΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°
ArrayUtils.CopyInsert (99, 2, nums, nums2);
ΡΠΈΠΏ T ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠΈΠΏΠΎΠΌ int, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 99 ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² nums ΠΈ nums2 ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΠΈΠΏΡ int. Π Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΈΠΏ Π’ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠΌ string.
Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π½ΠΈΠΆΠ΅ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ ΠΊΠΎΠ΄Π°.
// ArrayUtils.CopyInsert(0.01, 2, nums, nums2);
ΠΡΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π² Π½Π°ΡΠ°Π»Π΅ ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π² Π΄Π°Π½Π½ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° CopyInsert() ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ double, Π° ΡΡΠ΅ΡΠΈΠΉ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΡΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² nums ΠΈ nums2 ΡΠΈΠΏΠ° int. ΠΠΎ Π²ΡΠ΅ ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° Π’, Π° ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΈ, ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅, ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠΎΠ΄ΠΎΠ±Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡ ΡΠΈΠΏΠΎΠ²ΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°ΠΌΡΡ Π³Π»Π°Π²Π½ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° CopyInsert() ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΎΠ±ΡΠ°Ρ ΡΠΎΡΠΌΠ° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ_ ΡΠΈΠΏ ΠΈΠΌΡ_ΠΌΠ΅ΡΠΎΠ΄Π°<ΡΠΏΠΈΡΠΎΠΊ_ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²_ΡΠΈΠΏΠ°> (ΡΠΏΠΈΡΠΎΠΊ_ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²) {// ...
Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΏΠΈΡΠΎΠΊ_ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²_ΡΠΈΠΏΠ° ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΉ Π·Π°ΠΏΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΈΠΏΠ°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΈΠΏΠ° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°.
Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π½Π΅ΡΠ²Π½ΠΎΠΉ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΈΠΏΠΎΠ² ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠΈΠΏΠ° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΊΠ°Π·Π°Π½Ρ ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠΈΠΏΠ° ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΡΠΈ Π΅Π³ΠΎ Π²ΡΠ·ΠΎΠ²Π΅. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ CopyInsert() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΈΠΏΠ° string.
ArrayUtils.CopyInsert<string>("Π Π‘#", 1, strs, strs2);
Π’ΠΈΠΏ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ²Π½ΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π’ ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠΈΠΏΠΎΠ².
ΠΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π»ΠΎΠΆΠΈΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΡΠΊΠ°Π·Π°Π² ΠΈΡ ΠΏΠΎΡΠ»Π΅ ΡΠΏΠΈΡΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Π° CopyInsert() Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ»ΠΎΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ².
public static bool CopyInsert<T>(Π’ e, uint idx,
T[] src, T[] target) where T : class {
ΠΡΠ»ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° CopyInsert () Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ int ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° Π½Π΅ ΡΡΡΠ»ΠΎΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ.
// Π’Π΅ΠΏΠ΅ΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π’ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΡΡΠ»ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°!
ArrayUtils.CopyInsert(99, 2, nums, nums2); // Π’Π΅ΠΏΠ΅ΡΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ!
ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠ΅ Π΄Π΅Π»Π΅Π³Π°ΡΡ
ΠΠ°ΠΊ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π΄Π΅Π»Π΅Π³Π°ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΌΠΈ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΎΠ±ΡΠ°Ρ ΡΠΎΡΠΌΠ° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄Π΅Π»Π΅Π³Π°ΡΠ°.
delegate Π²ΠΎΠ·Π²ΡΠ°ΡΡΠ°Π΅ΠΌΡΠΉ_ΡΠΈΠΏ ΠΈΠΌΡ_Π΄Π΅Π»Π΅Π³Π°ΡΠ°<ΡΠΏΠΈΡΠΎΠΊ_ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²_ΡΠΈΠΏΠ°> (ΡΠΏΠΈΡΠΎΠΊ_Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²) ;
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΈΠΏΠ°. ΠΠ½ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ Π΄Π΅Π»Π΅Π³Π°ΡΠ°. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΡ Π΄Π΅Π»Π΅Π³Π°ΡΠΎΠ² Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈΡ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π² ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΠ΅ΠΌ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°ΡΡ Ρ Π»ΡΠ±ΡΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ.
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π΅Π»Π΅Π³Π°ΡΠ° SomeOp Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΠΈΠΏΠ° Π’. ΠΡΠΎΡ Π΄Π΅Π»Π΅Π³Π°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π’ ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΈΠΏΠ° Π’.