ஜாவாஸ்கிரிப்டில் சுழற்சி பிளேலிஸ்ட்களைக் கண்டறிதல்
குறியீட்டு நேர்காணல் கேள்விகளுக்கு பதிலளிக்கும் போது சுழற்சிகள் அல்லது மறுநிகழ்வுகளைக் கண்டறிவது பொதுவான பிரச்சனையாகும், குறிப்பாக இணைக்கப்பட்ட பட்டியல்கள் போன்ற தரவு கட்டமைப்புகள் தேவைப்படும். இந்தச் சிக்கல் பொதுவாக பிளேலிஸ்ட்களில் எழுகிறது, அங்கு பாடல்கள் குறிப்புகளின் சங்கிலியில் ஒன்றோடொன்று இணைக்கப்படலாம். ஒரு பாடல் முந்தைய பாடலைக் குறிப்பிடினால், பிளேலிஸ்ட் திரும்பத் திரும்ப வரும் என்று கூறப்படுகிறது.
இந்த ஜாவாஸ்கிரிப்ட் குறியீட்டு பயிற்சியின் நோக்கம், பிளேலிஸ்ட்டில் உள்ள ஏதேனும் பாடல்கள் மீண்டும் மீண்டும் வருமா என்பதை தீர்மானிக்கும் செயல்பாட்டை எழுதுவதாகும். இது ஒவ்வொரு பாடலையும் ஒவ்வொன்றாகச் சென்று, முந்தைய பாடலுக்குத் திரும்பும் குறிப்பு உள்ளதா என்பதைப் பார்க்கிறது. அனுபவம் வாய்ந்த புரோகிராமர்கள் கூட ஜாவாஸ்கிரிப்டில் இந்த வெளித்தோற்றத்தில் நேரடியான சிக்கலை தீர்க்க முயற்சிக்கும் போது பொருள் குறிப்புகள் மற்றும் லூப் கட்டுப்பாட்டின் நுணுக்கங்களில் தடுமாறலாம்.
அடிக்கடி, சிக்கல் மறு செய்கை தர்க்கம் வெளிப்படுத்தப்படும் விதத்தில் இருந்து வருகிறது, குறிப்பாக பொருள்களுக்கு இடையே உள்ள குறிப்புகள் கையாளப்படும் விதத்தில் இருந்து. இந்த நிகழ்வில், ஜாவாஸ்கிரிப்ட் லூப்களுக்குள் உள்ள பொருள் குறிப்புகளை எவ்வாறு நிர்வகிக்கிறது என்பதைப் புரிந்துகொள்ளும் உங்கள் திறனைப் பொறுத்தது. தீர்வை ஆராயும்போது, ஒரு பிளேலிஸ்ட்டில் இந்த குறிப்புகளை எவ்வாறு சரியான முறையில் மறுஒதுக்கீடு செய்வது மற்றும் கண்காணிப்பது என்பதில் கவனம் செலுத்துவோம்.
நாங்கள் சிக்கலை விரிவாகப் பிரித்து, தற்போதுள்ள தீர்வின் குறைபாடுகளைப் பார்ப்போம், மேலும் தொடர்ந்து வரும் இந்த பிளேலிஸ்ட் தடைக்கு, பின்வரும் விவாதத்தில் செயல்படக்கூடிய தீர்வை வழங்குவோம். இந்த பிழைத்திருத்தத்தின் மூலம், செயல்பாடு ஒரு பிளேலிஸ்ட்டில் உள்ள சுழற்சி குறிப்புகளை துல்லியமாக அடையாளம் கண்டு, உத்தேசிக்கப்பட்ட முடிவை உருவாக்க முடியும்.
கட்டளை | பயன்பாட்டின் உதாரணம் |
---|---|
Set() | தனிப்பட்ட தரவைச் சேமிக்க JavaScript Set() object பயன்படுகிறது. பிளேலிஸ்ட் சுழற்சிகளை அடையாளம் காண உதவ, பார்க்கப்பட்ட பாடல்களைக் கண்காணிக்க எடுத்துக்காட்டில் பயன்படுத்தப்பட்டு, எந்தப் பாடலும் மீண்டும் இயக்கப்படவில்லை என்பதை உறுதிப்படுத்துகிறது. |
has() | Set() object ஆனது has() செயல்பாட்டைக் கொண்டுள்ளது. தொகுப்பில் ஒரு குறிப்பிட்ட உறுப்பு உள்ளதா என்பதை இது சரிபார்க்கிறது. இங்கே, ஒரு பாடல் ஏற்கனவே கேட்கப்பட்டுள்ளதா என்பதைச் சரிபார்க்கிறது, இது பிளேலிஸ்ட் மீண்டும் ஒலிக்கிறது என்பதைக் குறிக்கிறது. |
add() | Set() object ஆனது has() செயல்பாட்டைக் கொண்டுள்ளது. கொடுக்கப்பட்ட உறுப்பு தொகுப்பில் உள்ளதா என்பதை இது சோதிக்கிறது. இங்கே, ஒரு பாடல் ஏற்கனவே கேட்கப்பட்டுள்ளதா என்பதைச் சரிபார்க்கிறது, இது பிளேலிஸ்ட் மீண்டும் ஒலிக்கிறது என்பதைக் குறிக்கிறது. |
two-pointer technique | சில நேரங்களில் ஃபிலாய்ட்-வார்ஷால் சுழற்சி கண்டறிதல் அல்காரிதம் என குறிப்பிடப்படும் இந்த முறை, இரண்டு சுட்டிகளைப் பயன்படுத்தி பிளேலிஸ்ட்டை வழிநடத்துகிறது: மெதுவாக மற்றும் விரைவானது. சுழல்களை திறம்பட கண்டறிவதற்கு, வேகமான சுட்டி இரண்டு படிகள் செல்லும் போது மெதுவான சுட்டி ஒரு படி நகரும். |
nextSong | பாடல் வகுப்பில் நெக்ஸ்ட் சாங் எனப்படும் தனித்துவமான பண்பு உள்ளது, அது பிளேலிஸ்ட்டில் அதன் பிறகு வரும் பாடலைக் குறிப்பிடுகிறது. ஒவ்வொரு பாடலும் மற்ற ஒவ்வொரு பாடலையும் தொடர்ச்சியாகக் குறிக்கும் இணைக்கப்பட்ட பட்டியல் கட்டமைப்பைப் பின்பற்றுவதை இது செயல்படுத்துகிறது. |
describe() | Mocha சோதனை கட்டமைப்பு விவரி() செயல்பாடு தொடர்புடைய அலகு சோதனைகளை ஒழுங்கமைக்க பயன்படுத்தப்படுகிறது. இது சோதனைகளை தர்க்கரீதியான வகைகளாகப் பிரிக்கிறது, மீண்டும் மீண்டும் வரும் பிளேலிஸ்ட்கள் மற்றும் செய்யாதவை. |
it() | மோச்சாவில், ஒரு சோதனை வழக்கு வரையறை அது () என்று அழைக்கப்படுகிறது. சோதனை செய்யப்பட வேண்டிய ஒரு குறிப்பிட்ட வழக்கை இது குறிக்கிறது, செயல்பாடு மீண்டும் மீண்டும் வரும் பிளேலிஸ்ட்டை சரியான முறையில் அங்கீகரிக்கிறது. |
assert.strictEqual() | இந்த முறை Node.js இல் உள்ள உறுதிப்படுத்தல் தொகுதியிலிருந்து. இந்த வழக்கில், இரண்டு மதிப்புகள் கண்டிப்பாக சமமாக உள்ளதா என்பதை தீர்மானிப்பதன் மூலம் பிளேலிஸ்ட் மறுநிகழ்வு செயல்பாட்டின் கணிக்கப்பட்ட முடிவை இது சரிபார்க்கிறது. |
ஜாவாஸ்கிரிப்டில் பிளேலிஸ்ட் சுழற்சி கண்டறிதலைப் புரிந்துகொள்வது
வழங்கப்பட்ட முதல் ஸ்கிரிப்ட், ஒவ்வொரு பாடலையும் ஒரு முனையாகக் கருத்தில் கொண்டு பிளேலிஸ்ட்டில் மீண்டும் மீண்டும் வரும் பாடல்களை அடையாளம் காண இணைக்கப்பட்ட பட்டியல் அணுகுமுறையைப் பயன்படுத்துகிறது. ஜாவாஸ்கிரிப்ட்டின் வகுப்பு அமைப்பு a ஐ உருவாக்க பயன்படுகிறது பாடல் பாடலின் பெயரையும் அடுத்த பாடலுக்கான குறிப்பையும் சேமித்து வைப்பதன் மூலம் ட்ராக்கில் இருந்து டிராக்கிற்கு பிளேலிஸ்ட்டின் ஓட்டத்தைப் பிரதிபலிக்கும் பொருள். தீர்வு தடங்களின் முக்கிய கூறு முன்பு ஒரு பயன்படுத்தி இசை சந்தித்தது அமைக்கவும். தற்போதைய பாடலை இதற்கு முன் கேட்டிருக்கிறதா என்று சோதித்து, பாடல்களை மீண்டும் சொல்ல, ஒரு வேளை லூப்பைப் பயன்படுத்துகிறோம். அப்படியானால், பிளேலிஸ்ட் மீண்டும் நிகழும் என்பதை உண்மை என்று திருப்பி அனுப்புகிறோம்.
ஃபிலாய்டின் சுழற்சி கண்டறிதல் அல்காரிதம், பொதுவாக இரண்டு-சுட்டி நுட்பம் என குறிப்பிடப்படுகிறது, இது இரண்டாவது வழியில் பயன்படுத்தப்படுகிறது. இந்த முறையைப் பயன்படுத்தி, இரண்டு சுட்டிகள் பிளேலிஸ்ட்டில் தனித்தனி வேகத்தில் நகரும்: ஒன்று இரண்டு பாடல்களைத் தவிர்த்துவிட்டு ஒரு நேரத்தில் ஒரு பாடலை முன்னோக்கி நகர்த்துகிறது. பிளேலிஸ்ட் மீண்டும் வருவதைக் குறிக்கும் சுழற்சி இருந்தால், இந்த சுட்டிகள் இறுதியில் சந்திக்கும். பார்க்கப்படும் பாடல்களைச் சேமிக்க வேண்டிய அவசியமில்லை என்பதால், இந்த முறை அதிக இட-திறன் வாய்ந்தது, எனவே பெரிய பிளேலிஸ்ட்களுக்கு இது சிறந்த தேர்வாகும்.
இந்த தீர்வுகள் ஜாவாஸ்கிரிப்டில் இணைக்கப்பட்ட பட்டியல்களை எவ்வாறு உருவாக்குவது என்பதையும் காட்டுகின்றன அடுத்த பாடல் சொத்து இணைப்புகள் ஒவ்வொன்றும் பாடல் மற்றொன்றை எதிர்க்க. முதல் ஸ்கிரிப்ட்டில் சுழற்சி கண்டறிதல் ஒரு செட் கட்டமைப்பைப் பயன்படுத்திக் கொள்கிறது. தொகுப்புகள் தனித்துவத்தை உறுதி செய்வதால், தொகுப்பில் ஒரு பாடல் ஏற்கனவே இசைக்கப்பட்டதா என்பதை உடனடியாக தீர்மானிக்க முடியும். இது செட் குறிப்பாக உதவியாக இருக்கும். இது ஒரு சுழற்சி எப்போது தொடங்குகிறது என்பதை அறிய உதவுகிறது மற்றும் முடிவில்லாத சுழற்சியில் சிக்காமல் இருக்க உதவுகிறது.
கடைசியாக, இரண்டு உத்திகளுக்கும் சேர்க்கப்பட்டுள்ள யூனிட் சோதனைகள், தீர்வு பல்வேறு அமைப்புகளில் துல்லியமானது என்று உத்தரவாதம் அளிக்கிறது. எங்கள் குறியீட்டைச் சரிபார்க்க, நாங்கள் மோச்சா சோதனை கட்டமைப்பைப் பயன்படுத்தினோம். Node.js வலியுறுத்துகின்றனர் மாட்யூல் எதிர்பார்த்தபடி வெளியீடுகள் இருப்பதை உறுதிசெய்ய பயன்படுத்தப்படுகிறது, மேலும் மோச்சாவின் விவரிக்க மற்றும் அது சோதனைகளை தர்க்கரீதியாக கட்டமைக்க செயல்பாடுகள் பயன்படுத்தப்படுகின்றன. யூனிட் சோதனைகள் வளர்ச்சிச் செயல்பாட்டில் ஒரு முக்கிய பங்கை வகிக்கின்றன, ஏனெனில் அவை செயல்பாடு மீண்டும் நிகழும் மற்றும் திரும்பத் திரும்ப வராத பிளேலிஸ்ட்களுக்கு எதிர்பார்த்தபடி செயல்படும் என்பதை உறுதிப்படுத்துகிறது, இது தீர்வின் மீள்தன்மைக்கு உத்தரவாதம் அளிக்கிறது.
ஜாவாஸ்கிரிப்ட் மூலம் பிளேலிஸ்ட்டில் மீண்டும் மீண்டும் வரும் பாடல்களைக் கண்டறிதல்
லூப்களுடன் ஜாவாஸ்கிரிப்டில் ஆப்ஜெக்ட்-ஓரியெண்டட் புரோகிராமிங்
class Song {
constructor(name) {
this.name = name;
this.nextSong = null;
}
/
* @return {boolean} true if the playlist is repeating, false if not.
*/
isRepeatingPlaylist() {
let seenSongs = new Set();
let current = this;
while (current) {
if (seenSongs.has(current)) {
return true; // Playlist is repeating
}
seenSongs.add(current);
current = current.nextSong;
}
return false; // Playlist is not repeating
}
}
// Testing the solution
let first = new Song("Hello");
let second = new Song("Eye of the Tiger");
let third = new Song("Third");
first.nextSong = second;
second.nextSong = third;
third.nextSong = first; // Creates a loop
console.log(first.isRepeatingPlaylist()); // true
மாற்று அணுகுமுறை: சுழற்சியைக் கண்டறிவதற்கு இரண்டு சுட்டிகளைப் பயன்படுத்துதல்
ஃபிலாய்ட்-வார்ஷல் அல்காரிதத்துடன் இணைக்கப்பட்ட பட்டியல் சுழற்சி கண்டறிதல்
class Song {
constructor(name) {
this.name = name;
this.nextSong = null;
}
/
* @return {boolean} true if the playlist is repeating, false if not.
*/
isRepeatingPlaylist() {
let slow = this;
let fast = this;
while (fast !== null && fast.nextSong !== null) {
slow = slow.nextSong; // move slow pointer by 1 step
fast = fast.nextSong.nextSong; // move fast pointer by 2 steps
if (slow === fast) {
return true; // Loop detected
}
}
return false; // No loop
}
}
// Testing the solution
let first = new Song("Hello");
let second = new Song("Eye of the Tiger");
let third = new Song("Third");
first.nextSong = second;
second.nextSong = third;
third.nextSong = first; // Creates a loop
console.log(first.isRepeatingPlaylist()); // true
பிளேலிஸ்ட் லூப் கண்டறிதலுக்கான அலகு சோதனை
Node.js மற்றும் Mocha உடன் isRepeatingPlaylist செயல்பாட்டை சோதிக்கிறது
const assert = require('assert');
describe('isRepeatingPlaylist', function () {
it('should return true for a repeating playlist', function () {
let first = new Song('Song A');
let second = new Song('Song B');
let third = new Song('Song C');
first.nextSong = second;
second.nextSong = third;
third.nextSong = first; // Creates a loop
assert.strictEqual(first.isRepeatingPlaylist(), true);
});
it('should return false for a non-repeating playlist', function () {
let first = new Song('Song A');
let second = new Song('Song B');
let third = new Song('Song C');
first.nextSong = second;
second.nextSong = third;
assert.strictEqual(first.isRepeatingPlaylist(), false);
});
});
ஜாவாஸ்கிரிப்டில் மேம்பட்ட பிளேலிஸ்ட் லூப் கண்டறிதல் நுட்பங்கள்
அடிப்படையில் பிளேலிஸ்ட்டின் அடிப்படைக் கட்டமைப்பைப் புரிந்துகொள்வது இணைக்கப்பட்ட பட்டியல்கள் பிளேலிஸ்ட் லூப் கண்டறிதலின் ஒரு சுவாரஸ்யமான பகுதியாகும். திரும்பத் திரும்ப வராத பிளேலிஸ்ட்டில் உள்ள ஒவ்வொரு பாடலும் அதற்கு முந்தைய பாடலுடன் இணைக்கப்படும், அந்தப் பாடலைப் பற்றிய குறிப்புகள் எதுவும் இல்லை மற்றும் பட்டியல் முடிவடையும் வரை. ஒரு பாடல் முந்தைய பாடலைக் குறிப்பிடும் போது நாம் ஒரு சுழற்சியைத் தொடங்குகிறோம், எனவே ஒரு வகையில் பட்டியல் "எல்லையற்றது". இந்த வகையான சுழற்சிகளைக் கண்டறிவது பிளேலிஸ்ட்களுக்கு மட்டுமல்ல, நினைவக ஒதுக்கீடு மற்றும் ரூட்டிங் அல்காரிதம்களுக்கும் முக்கியமானது.
இந்த சுழற்சிகளை ஜாவாஸ்கிரிப்ட்டில் சுட்டி நுட்பங்கள் மற்றும் கட்டமைப்புகளைப் பயன்படுத்தி திறம்பட கண்டறிய முடியும் அமைக்கவும். இது தனித்துவத்தை உறுதி செய்வதாலும், சுழற்சியைத் தொடங்காமல் பாடல்களை மறுபரிசீலனை செய்வதிலிருந்தும் தடுக்கிறது அமைக்கவும் குறிப்பாக உதவியாக உள்ளது. மாறாக, Floyd-Warshall டூ-பாய்ண்டர் அணுகுமுறை என்பது விண்வெளி-உகந்த தீர்வாகும், இதில் இரண்டு நகரும் குறிப்புகள் அல்லது சுட்டிகள் வெவ்வேறு வேகங்களைக் கொண்டுள்ளன. அவை ஒன்று சேர்ந்தால், ஒரு முறை காணப்படுகிறது.
இந்த அல்காரிதம்களை மிகவும் திறமையானதாக்குவதன் மூலம், ஆயிரக்கணக்கான பாடல்களைக் கொண்ட பிளேலிஸ்ட்களை விரைவாக ஆய்வு செய்ய முடியும். இரண்டு-சுட்டி நுட்பமானது, நினைவகப் பயன்பாட்டில் சிக்கலாக இருக்கும் சூழ்நிலைகளுக்கு ஏற்றதாக இருக்கும், ஏனெனில் இது O(n) நேர சிக்கலான தன்மை மற்றும் O(1) இட சிக்கலைக் கொண்டுள்ளது. மேலும், பல்வேறு அமைப்புகளில் லூப்பிங் மற்றும் லூப்பிங் அல்லாத பிளேலிஸ்ட்களைக் கண்டறியும் மோச்சா போன்ற யூனிட் சோதனைகளைப் பயன்படுத்துவதன் மூலம் எங்கள் தீர்வுகள் சரியாகச் செயல்படச் சரிபார்க்கப்படுகின்றன.
பிளேலிஸ்ட் சைக்கிள் கண்டறிதல் பற்றி பொதுவாகக் கேட்கப்படும் கேள்விகள்
- பிளேலிஸ்ட்டில் சுழற்சி என்றால் என்ன?
- பிளேலிஸ்ட்டில் உள்ள ஒரு பாடல் முந்தைய பாடலைக் குறிப்பிடும்போது, சுழற்சி எனப்படும் லூப்பிங் வரிசை உருவாக்கப்படுகிறது.
- இரண்டு-சுட்டி நுட்பம் ஒரு சுழற்சியை எவ்வாறு கண்டறிகிறது?
- ஒரு வேகமான சுட்டி இரண்டு படிகளை நகர்த்துகிறது, மற்றும் ஒரு மெதுவான சுட்டிக்காட்டி இரண்டு-சுட்டி நுட்பத்தைப் பயன்படுத்தி ஒரு நேரத்தில் ஒரு படி நகரும். அவை ஒன்று சேர்ந்தால், ஒரு வளையம் உள்ளது.
- ஏன் ஒரு Set சுழற்சி கண்டறிதலுக்குப் பயன்படுகிறதா?
- ஒரு Set, தனித்துவமான மதிப்புகள் சேமிக்கப்படுகின்றன. இசையைக் கவனத்தில் வைத்திருப்பது பயனுள்ளதாக இருக்கும். ஒரு இசை மீண்டும் இயக்கப்பட்டால் ஒரு வளையம் அடையாளம் காணப்படும்.
- மற்ற பயன்பாடுகளுக்கு இந்த அல்காரிதத்தை நான் பயன்படுத்தலாமா?
- உண்மையில், சுழற்சி கண்டறிதல் நுட்பத்தைப் பயன்படுத்தி இணைக்கப்பட்ட பட்டியல்கள், நினைவக மேலாண்மை மற்றும் நெட்வொர்க் ரூட்டிங் ஆகியவற்றில் சுழல்களை அடையாளம் காண்பதில் நிறைய வேலைகள் செல்கின்றன.
- நாம் ஏன் பயன்படுத்துகிறோம் while பிளேலிஸ்ட் டிராவர்சலில் சுழல்கள் உள்ளதா?
- நாம் பிளேலிஸ்ட்டைப் பயன்படுத்தி மீண்டும் மீண்டும் செல்லலாம் while சுழற்சியைக் கண்டுபிடிக்கும் வரை அல்லது பட்டியலின் முடிவை அடையும் வரை லூப் செய்யவும்.
மீண்டும் மீண்டும் பிளேலிஸ்ட்களைக் கண்டறிவதற்கான இறுதி எண்ணங்கள்
பிளேலிஸ்ட்டில் சுழற்சிகளைக் கண்டறிவது கடினமாக இருக்கலாம், குறிப்பாக JavaScript இன் ஆப்ஜெக்ட் குறிப்பு மேலாண்மைக்கு செல்லும்போது. எவ்வாறாயினும், இரண்டு-சுட்டி நுட்பத்தைப் பயன்படுத்துதல் அல்லது ஒரு தொகுப்பைக் கொண்டு பாடல் குறிப்புகளைக் கண்காணிப்பது போன்ற நுட்பங்களைப் பயன்படுத்துவதன் மூலம் இந்தச் சிக்கலைத் திறமையாகக் கையாளலாம் மற்றும் எங்கள் குறியீட்டை நெறிப்படுத்தலாம்.
இந்த நுட்பங்கள் எவ்வாறு செயல்படுகின்றன என்பதை அறிவது, நீங்கள் குறியீட்டு நேர்காணலுக்காக அல்லது நடைமுறைப் பயன்பாடுகளுக்காக இதைச் சமாளிக்கிறீர்களென்றாலும், சிக்கலை மிகவும் திறம்பட தீர்க்க உதவும். போன்ற பயனுள்ள கட்டமைப்புகளைப் பயன்படுத்துதல் அமைக்கவும் சுழற்சியைக் கண்டறிவதில் சுட்டிகள் எவ்வாறு உதவுகின்றன என்பதைப் புரிந்துகொள்வது கற்க வேண்டிய முக்கிய பாடங்கள்.
பிளேலிஸ்ட் சுழற்சி கண்டறிதலுக்கான ஆதாரங்கள் மற்றும் குறிப்புகள்
- பிளேலிஸ்ட் சுழற்சி கண்டறிதல் அல்காரிதம்களுக்கான உத்வேகம் பொதுவான இணைக்கப்பட்ட பட்டியல் சிக்கல்கள் மற்றும் ஃபிலாய்ட்-வார்ஷல் அல்காரிதம் போன்ற நுட்பங்களிலிருந்து பெறப்பட்டது. இந்த விரிவான ஆதாரத்தில் இணைக்கப்பட்ட பட்டியல்கள் மற்றும் சுழற்சி கண்டறிதல் பற்றி மேலும் அறிக: விக்கிபீடியாவில் சுழற்சி கண்டறிதல் .
- பயன்படுத்தப்படும் மற்றொரு சிறந்த ஆதாரம், செட் பொருள்களுக்கான ஜாவாஸ்கிரிப்ட் ஆவணமாகும், இது முதல் தீர்வு அணுகுமுறையில் முக்கிய பங்கு வகிக்கிறது: MDN இல் ஜாவாஸ்கிரிப்ட் அமைக்கப்பட்டது .
- ஜாவாஸ்கிரிப்டில் இன்னும் விரிவான சோதனை நுட்பங்களுக்கு, மோச்சாவின் அதிகாரப்பூர்வ ஆவணங்கள் சோதனை கட்டமைப்பு மற்றும் வலியுறுத்தல்களைப் புரிந்துகொள்வதற்கான முக்கிய ஆதாரமாக இருந்தது: மோச்சா சோதனை கட்டமைப்பு .
- சுழற்சி கண்டறிதல் சிக்கல்களுக்கு அடிக்கடி பயன்படுத்தப்படும் இரண்டு-சுட்டி நுட்பத்தில் இந்த வழிகாட்டியை ஆராயுங்கள், மேலும் இது இங்கு பயன்படுத்தப்படும் திறமையான முறைகளில் ஒன்றாகும்: இணைக்கப்பட்ட பட்டியலில் லூப்பைக் கண்டறிக .