Showing posts with label String. Show all posts
Showing posts with label String. Show all posts

راه حل ابتدایی مشکل فارسی در فیوژن چارت

هر چند فیوژن چارت با نمایش زبان فارسی مشکلی ندارد اما وقتی از چند کلمه استفاده کنید، کلمات به صورت بر عکس در چارت نمایش داده می شوند. مثلا وقتی برچسب یه میله در نمودار " درصد پیشرفت پروژه " باشد، چیزی که نمایش داده می شود " پروژ پیشرفت درصد " خواهد بود. راه حل ساده و ابتدایی که برای این مشکل می توان ارائه داد، تعریف یک متد توسعه برای کلاس string می باشد تا به کمک آن کلمات یه رشته را معکوس نماییم. به این ترتیب با فراخوانی این متد پیش از ارائه برچسب ها به فیوژن چارت، آنها به صورت صحیح نمایش داده خواهند شد.
این متد را اینگونه پیاده می کنیم:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = "This is a test".ReverseWords();
        }
    }

    static class Utility
    {
        public static string ReverseWords(this string str)
        {
            string reversed = "";
            string[] words = str.Split(' ');

            foreach (string word in words)
                reversed = word + " " + reversed;

            return reversed.TrimEnd(' ');
        }
    }
}


ابتدا رشته را با کمک فواصل خالی به کلمات می شکنیم.کلمات را به صورت عکس کنار هم می چینیم و در نهایت فاصله خالی انتهایی را حذف می کنیم.

بهبود سرعت کار با رشته ها در سی شارپ

شاید برای شما هم سوال باشد که نوع string و stringBuilder  با هم چه تفاوت هایی دارند و هر کدام از آنها برای چه کاری مفید هستند.

تقریبا هر دوی اینها برای کار با رشته ها استفاده می شوند. ولی stringBuilder بر روی ساخت رشته های تاکید در حالی که string عمومی تر به حساب می آید و عملیات های بیشتری را میتواند رو رشته ها انجام دهد.
نکته مهم این است که string به اندازه رشته ای که هم اکنون ذخیره کرده است ، فضا در اختیار می گیرد و برای عملیات هایی که مستلزم ساخته شدن رشته ای جدید ( حاصل AppendFormat یا Concat ) است بدون هیچ تصمیم گیری ، همیشه نمونه ای از نوع string برای ذخیره سازی نتیجه ی آن میسازد. در حالی که stringbuilder یا استفاده از مکانیزم اختصاص فضای با اندازه ای از پیش تعریف شده ( که کمتر از MaxCapecity و بیشتر یا مساوی Length است ) تنها در صورتی به افزایش فضای در دسترس اقدام می کند که به آن نیاز داشته باشد. هر چند این مقدار در زمان اجرا قبل تغییر است و همچنین در صورت نیاز افزایش می یابد، ولی همین امر باعث می شود عملکرد این کلاس در برخی موارد خیلی بهینه تر از string باشد.
اما چه موقع باید از string و چه موقع از stringbuilder استفاده کرد؟ جواب این سوال را میتوان با توجه به نحوه پیاده سازی این دو کلاس و تجربه کار کردن با آنها به دست آورد. اما مطالعه دو مقاله زیر می تواند خیلی مفید باشد:



همچنین اسناد مایکروسافت و بخصوص بخش با عنوان Performance Considerations در آدرس زیر:

 http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx