मुझे यह जानने की आवश्यकता है कि स्ट्रिंग में सभी वर्ण बराबर हैं (उसी वर्ण द्वारा गठित)। स्ट्रिंग के सभी तत्व किसी विशेष चार के बराबर होते हैं, तो फ़ंक्शन को सही या गलत वापस करना होगा।यह निर्धारित करने के लिए कि स्ट्रिंग में सभी वर्ण बराबर
मैंने यह फ़ंक्शन लिखा है जो अच्छी तरह से काम करता है, लेकिन मैं एक अधिक इष्टतम (सबसे तेज़) समाधान की तलाश में हूं, तारों में हजारों वर्ण हो सकते हैं।
function AllElementsAreEqual(Element:Char;Str:String):Boolean;
var
i : Integer;
begin
Result:=True;
if Str<>'' then
for i:=1 to Length(Str) do
if Str[i]<>Element then
begin
Result:= False;
exit;
end;
end;
अद्यतन अंत में बैरी केली सुझाव का उपयोग करने और inline
निर्देश जोड़ने, प्रदर्शन में काफी सुधार किया गया था।
function AllElementsAreEqual(Const Element:Char;Str:String):Boolean;inline;
type
ArrayInt = Array of Integer;
var
i : Integer;
Delta: Integer;
List : ArrayInt;
Test : Integer;
begin
Result:=True;
Delta:=(Length(Str) mod 4);
if Delta<>0 then
Str:=Str+StringOfChar(Element,4-Delta);
Test:=Ord(Element) + Ord(Element) shl 8 + Ord(Element) shl 16 + Ord(Element) shl 24;
List:=ArrayInt(@(Str[1]));
for i:=0 to ((Length(Str) div 4)-1) do
if List[i]<>Test then
begin
Result:=False;
exit;
end;
end;
अद्यतन 2
मैं माफी चाहता हूँ, लेकिन मैं समाधान (एक बग के साथ) के एक पुराने कार्यान्वयन पोस्ट, अब तय हो गई है। बैरी सुझाव के बेहतर कार्यान्वयन के लिए The_Fox के लिए धन्यवाद।
"===" ट्रिपल बराबर का उपयोग क्यों न करें जो इसके लिए उपयोग किया जाता है। तुलना करता है अगर यह बिल्कुल = करने के लिए है। डेटा प्रकार के साथ-साथ वर्ण – Val
@ वैल की जांच करता है, क्योंकि डेल्फी के पास "===" कब होता है? क्या आप जावास्क्रिप्ट के साथ डेल्फी को भ्रमित कर रहे हैं? –
मेरा बुरा मैं कुछ और सोच रहा था ... – Val