2011-08-30 16 views
5

में तत्वों को स्थानांतरित करना मेरे पास यह बहुत ही सरल सरणी है जिसे मैं कुछ वस्तुओं के चारों ओर स्थानांतरित करने में सक्षम होना चाहता हूं। क्या ऐसा करने के लिए सी # में कोई भी उपकरण बनाया गया है? यदि नहीं, तो आपको यह करने का कोई सुझाव है कि इसे कैसे किया जाए।सरणी सी #

उदाहरण

var smallArray = new string[4]; 
smallArray[0] = "a"; 
smallArray[1] = "b"; 
smallArray[2] = "c"; 
smallArray[3] = "d"; 

में

और कहते हैं कि मैं (प्रोग्राम के रूप में) पारी सूचकांक 2 और 0 करना चाहते हैं, बनाने

smallArray[0] = "c"; 
smallArray[1] = "a"; 
smallArray[2] = "b"; 
smallArray[3] = "d"; 

धन्यवाद।

+0

बस स्पष्ट होना: "शिफ्ट" द्वारा, क्या आपका मतलब "स्वैप" है? –

+0

http://stackoverflow.com/questions/552731/c-good-best-implementation-of-swap-method – hatchet

+0

का डुप्लिकेट नहीं, माफ करना मेरा पहला उदाहरण थोड़ा अस्पष्ट है, मैंने उदाहरण को थोड़ा और स्पष्ट कर दिया है अभी व। –

उत्तर

12

संपादित करें: ठीक है, अब आपने उदाहरण बदल दिया है, इसमें कुछ भी अंतर्निहित नहीं है - और वास्तव में यह लिखने के लिए दर्द का थोड़ा सा होगा ... आपको उन मामलों पर विचार करना होगा जहां आप इसे स्थानांतरित कर रहे हैं "ऊपर" और जहां आप इसे "नीचे" ले जा रहे हैं, उदाहरण के लिए। आप इकाई परीक्षण चाहते हैं, लेकिन मुझे लगता है कि इस यह करना चाहिए ...

public void ShiftElement<T>(this T[] array, int oldIndex, int newIndex) 
{ 
    // TODO: Argument validation 
    if (oldIndex == newIndex) 
    { 
     return; // No-op 
    } 
    T tmp = array[oldIndex]; 
    if (newIndex < oldIndex) 
    { 
     // Need to move part of the array "up" to make room 
     Array.Copy(array, newIndex, array, newIndex + 1, oldIndex - newIndex); 
    } 
    else 
    { 
     // Need to move part of the array "down" to fill the gap 
     Array.Copy(array, oldIndex + 1, array, oldIndex, newIndex - oldIndex); 
    } 
    array[newIndex] = tmp; 
} 

आप शायद एक सरणी है, जो आप सम्मिलित और विशेष रूप से अनुक्रमित में दूर करने के लिए अनुमति देता है के बजाय एक List<T> उपयोग करने पर विचार करना चाहिए। उन दो परिचालनों को केवल प्रासंगिक खंड की प्रतिलिपि बनाने की तुलना में अधिक महंगा होगा, लेकिन यह बहुत अधिक पठनीय होगा।

+0

वास्तव में यह मेरा बुरा है, मेरा मतलब स्वैप नहीं था, मैं एक नई अनुक्रमणिका सेट करके तत्वों के चारों ओर स्थानांतरित करने में सक्षम होना चाहता हूं! (मेरा उदाहरण अपडेट किया गया)। धन्यवाद! –

+0

@Trikks: ठीक है, मेरे कोड संपादित किया। हालांकि इसे पूरी तरह से परीक्षण करें! –

5

यह एक मौजूदा प्रश्न:

C# Array Move Item (Not ArrayList/Generic List)

जवाब है:

void MoveWithinArray(Array array, int source, int dest) 
{ 
    Object temp = array.GetValue(source); 
    Array.Copy(array, dest, array, dest + 1, source - dest); 
    array.SetValue(temp, dest); 
} 
+0

मैंने उस पर ध्यान दिया लेकिन इसे लागू करने में असफल रहा। –

+2

मुझे नहीं लगता कि यह काम करेगा जब स्रोत

0

यह

var arr = new ArrayList 
    { 
     "a", "b", "c", "d", "e", "f" 
    }; 
var first = arr[2]; //pass the value which you want move from 
var next = arr[5]; //pass the location where you want to place 
var m = 0; 
var k = arr.IndexOf(first, 0, arr.Count); 
m = arr.IndexOf(next, 0, arr.Count); 
if (k > m) 
{ 
    arr.Insert(m, first); 
    arr.RemoveAt(k + 1); 
} 
else 
{ 
    arr.Insert(k, next); 
    arr.RemoveAt(m + 1); 
} 

रिटर्न ए, बी, एफ, सी, डी मेरी समस्या हल , ई

0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace SecondLargest 
{ 
    class ArraySorting 
    { 
     public static void Main() 
     { 
     int[] arr={5,0,2,1,0,44,0,9,1,0,23}; 

     int[] arr2 = new int[arr.Length]; 
     int arr2Index = 0; 
     foreach (int item in arr) 
     { 
      if(item==0) 
      { 
       arr2[arr2Index] = item; 
       arr2Index++; 
      } 
     } 
     foreach (int item in arr) 
     { 
      if(item!=0) 
      { 
       arr2[arr2Index] = item; 
       arr2Index++; 
      } 
     } 

     foreach (int item in arr2) 
     { 
      Console.Write(item+" "); 
     } 

      Console.Read(); 

     } 
    } 
} 
+0

स्टैक ओवरफ़्लो में आपका स्वागत है! हालांकि यह कोड प्रश्न का उत्तर दे सकता है, इस सवाल का जवाब देने के तरीके के बारे में अतिरिक्त संदर्भ प्रदान करना और/या कैसे यह दीर्घकालिक मूल्य में सुधार करता है। – ryanyuyu

संबंधित मुद्दे